UVA10142/PC110108Australian Voting

10142 Australian Voting Accepted C++11 0.769 2014-02-11 05:01:20

这题目感觉上思路很多,但是因为有一些想法上的缺陷,困扰了我好长一段时间,可能是刚刚入门的原因。

从理解题目就很坑爹了,如果你跟我一样是用刘汝佳的编程挑战的话。

题目的意思就是:

有n个候选人,以及选票(个数不会在输入时候事先给定),每个选票是一个序列,我们每次只读取第一个未出局的。

结束只有两种可能:

一、获票最高者所得票大于总票数的一半

二、所有人票都相同

那么在处理好读人名和票数据后,很容易就知道怎么写了。

我的思路就是:得到总票数pnum,最大票数maxs,最小票数mins,以及最大票数的下标maxi,

对于第一种情况,直接判断maxs>pnum/2;之后再利用下标输出其名字。

对于第二种情况,直接比较maxs==mins,即可。(夹逼定理)

对于淘汰,则让候选人的票数为-6,当然,这个只要是个负数即可。

关键:最后一个案例不要输出换行。

我的测试数据:(仅仅供给参考。)

4

3
a
b
c
1 2 3 4
a
b
c
d
1 2 3 4
1 2 3 4
1 2 3 4
2 1 3 4
2 1 3 4
2 1 3 4
3 4 1 2
3 4 2 1 4
a
b
c
d
1 2 3 4
1 2 3 4
1 2 3 4
2 1 3 4
2 1 3 4
2 1 3 4
3 4 1 2

我的代码。

#include <iostream>
#include <cstring>
#include <vector>
#include <map>
#include <sstream>
using namespace std; int main()
{ vector<string> n;
vector<int> s;
map<int,vector<int> > p;
string tmp;
int cases; //案例个数
int mnum; //候选人个数
int i;
cin>>cases;
while(cases--){
n.clear();
p.clear();
s.clear();
cin>>mnum;
if(mnum){
cin.ignore();
n.resize(mnum+1);
s.resize(mnum+1);
int pnum=0; //票数 vector<int>::iterator itr; for(i=1;i<=mnum;i++){
getline(cin,tmp);
n[i]=tmp; } while((getline(cin, tmp), tmp.length() > 0)) {
//读票
vector<int> ptmp(mnum);
istringstream iss(tmp); for(i=0;i<mnum;i++)
iss>>ptmp[i]; p[pnum]=ptmp;
pnum++; } //选举
for(i=0;i<pnum;i++){
itr=p[i].begin();
s[*itr]++; } //得出结果
while(1){ /*
for(i=1;i<=mnum;i++){
cout<<n[i]<<" "<<s[i]<<endl; //选票过程 }
*/
int maxs=-1,mins=5000,maxi=-1;
//选最大最小
for(i=1;i<=mnum;i++){
if(s[i]>=0){
if(s[i]>maxs){
maxs=s[i];
maxi=i;
}
if(s[i]<mins){
mins=s[i];
}
} } //1.最高者大于50%
if(maxs>pnum/2){
cout<<n[maxi]<<endl;
break;
}
//2.平局
if(maxs==mins){
for(i=1;i<=mnum;i++){
if(s[i]>0){
cout<<n[i]<<endl;
}
}
break; }
//cout<<mins<<"mins"<<endl;
//3.未定
//线性搜索出s[i]==min的出来;
for(i=1;i<=mnum;i++){
if(s[i]==mins){
s[i]=-6; //随便设定一个负数,以表示出局; }
} for(i=0;i<pnum;i++){
itr=p[i].begin();
if(s[*itr]==-6){
while(s[*itr]==-6){
// tt.push(i);
itr=p[i].erase(itr);
}
s[*itr]++;
}
}
} if(cases!=0)
cout<<endl;
}
} return 0;
}

UVA10142/PC110108Australian Voting的更多相关文章

  1. 11G RAC 中 OCR 及Voting Disk 相关操作

    一.启动oracle clusterware先决条件:Oracle High Availability Services daemon(OHASD)运行在所有集群节点上1.启动整个Oracle Clu ...

  2. windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群

     windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 能够放到 asm 磁盘上,而ASM的启动依赖于ocr和vo ...

  3. 11g r2 模拟OCR和voting disk不可用,完整恢复过程,以及一些注意事项

    环境:RHEL5.8 RAC 11.2.0.3.0 1:查看ORC和voting disk信息: In 11g Release 2 your voting disk data is automatic ...

  4. Voting

    Voting time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  5. Graphical Analysis of German Parliament Voting Pattern

    We use network visualizations to look into the voting patterns in the current German parliament. I d ...

  6. CSA Round #54 $\ $Voting

    CSA Round #54 \(\ \)Voting 题目大意: 原题网址:戳我戳我! 一次歌唱比赛中,一位歌手刚刚结束表演,评委正在打分. 一共有 \(n\) 位评委,他们每人可以打 \(1\) 分 ...

  7. Solidity by Example详解 - Voting

    Example地址:https://solidity.readthedocs.io/en/develop/solidity-by-example.html#voting Voting程序的功能: 这个 ...

  8. Oracle 10g RAC OCR、Voting disk更换

    环境:OEL 5.7 + Oracle 10.2.0.5 RAC 需求:更换存储,OCR.Voting disk同时需要更换到新存储. 1.替换OCR 2.替换voting disk 1.替换OCR ...

  9. 重新配置ocr voting

    由于存储空间不足,下线的数据库需要把存储空间腾出来,关闭集群资源,主机工程师收回lun需要(包括ocr 和 voting data 磁盘组),新的应用需要上线需要新的数据库,新的hitach存储到位需 ...

随机推荐

  1. How do I use a host name to look up an IP address?

    The InetAddress class can be used to perform Domain Name Server (DNS) lookups. For example, you can ...

  2. ASP.NET- LinkButton 传递多个参数

    在使用LinkButton时可能会遇到需要传递多个参数的问题,而LinkButton的用来传递参数的属性commandargument需要传递的是一个string类型的值.因而传递多个参数时需要进行一 ...

  3. Win7 下安装RabbitMQ

    RabbitMQ依赖erlang,所以先安装erlang,然后再安装RabbitMQ; 下载RabbitMQ,下载地址: rabbitmq-server-3.5.6.exe和erlang,下载地址:o ...

  4. 在VS Nuget命令行下进行EF数据库迁移

    找到项目中,用到数据库DLL的地方,然后选中该项目,打开Nuget命令行输入以下的命令: 其中cardId为迁移名称,自己取

  5. mysql日志设置

    mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数.如果在my.cnf里面修改,需增加如 ...

  6. 用Gitosis搭建Git服务器(经典资料)

    该文档介绍了用Gitosis自己搭建Git服务器,文章来自于<Git权威指南>一书的第31章,讲述详细易懂易操作,是搭建Git服务器绝好资料! 下载地址:http://download.c ...

  7. CPP: 跨平台生成GUID/UUID

    #ifndef XGUID_H#define XGUID_H #include <string>#include <stdio.h>#ifdef WIN32#include & ...

  8. CCControlSlider和CCControlStepper用法

    一开始,size的大小是系统分配.玩家可以通过setDefaultSize()更改值 1. CCControlSlider用法 CCSpriteFrameCache::sharedSpriteFram ...

  9. android之tween动画详解

    android中一共提供了两种动画,其一便是tween动画,tween动画通过对view的内容进行一系列的图像变换(包括平移,缩放,旋转,改变透明度)来实现动画效果,动画效果的定义可以使用xml,也可 ...

  10. 实现RecycleView动态使列表item可以点击或不可点击切换

    效果 这里讲的是第二个button跳转的Activity,这里和上一篇不同之处在于可以item点击.item子控件点击 继承BaseAdapter 同样也要继承BaseAdapter public c ...