UVA10142/PC110108Australian Voting
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的更多相关文章
- 11G RAC 中 OCR 及Voting Disk 相关操作
一.启动oracle clusterware先决条件:Oracle High Availability Services daemon(OHASD)运行在所有集群节点上1.启动整个Oracle Clu ...
- windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群
windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 能够放到 asm 磁盘上,而ASM的启动依赖于ocr和vo ...
- 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 ...
- Voting
Voting time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- Graphical Analysis of German Parliament Voting Pattern
We use network visualizations to look into the voting patterns in the current German parliament. I d ...
- CSA Round #54 $\ $Voting
CSA Round #54 \(\ \)Voting 题目大意: 原题网址:戳我戳我! 一次歌唱比赛中,一位歌手刚刚结束表演,评委正在打分. 一共有 \(n\) 位评委,他们每人可以打 \(1\) 分 ...
- Solidity by Example详解 - Voting
Example地址:https://solidity.readthedocs.io/en/develop/solidity-by-example.html#voting Voting程序的功能: 这个 ...
- 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 ...
- 重新配置ocr voting
由于存储空间不足,下线的数据库需要把存储空间腾出来,关闭集群资源,主机工程师收回lun需要(包括ocr 和 voting data 磁盘组),新的应用需要上线需要新的数据库,新的hitach存储到位需 ...
随机推荐
- 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 ...
- ASP.NET- LinkButton 传递多个参数
在使用LinkButton时可能会遇到需要传递多个参数的问题,而LinkButton的用来传递参数的属性commandargument需要传递的是一个string类型的值.因而传递多个参数时需要进行一 ...
- Win7 下安装RabbitMQ
RabbitMQ依赖erlang,所以先安装erlang,然后再安装RabbitMQ; 下载RabbitMQ,下载地址: rabbitmq-server-3.5.6.exe和erlang,下载地址:o ...
- 在VS Nuget命令行下进行EF数据库迁移
找到项目中,用到数据库DLL的地方,然后选中该项目,打开Nuget命令行输入以下的命令: 其中cardId为迁移名称,自己取
- mysql日志设置
mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数.如果在my.cnf里面修改,需增加如 ...
- 用Gitosis搭建Git服务器(经典资料)
该文档介绍了用Gitosis自己搭建Git服务器,文章来自于<Git权威指南>一书的第31章,讲述详细易懂易操作,是搭建Git服务器绝好资料! 下载地址:http://download.c ...
- CPP: 跨平台生成GUID/UUID
#ifndef XGUID_H#define XGUID_H #include <string>#include <stdio.h>#ifdef WIN32#include & ...
- CCControlSlider和CCControlStepper用法
一开始,size的大小是系统分配.玩家可以通过setDefaultSize()更改值 1. CCControlSlider用法 CCSpriteFrameCache::sharedSpriteFram ...
- android之tween动画详解
android中一共提供了两种动画,其一便是tween动画,tween动画通过对view的内容进行一系列的图像变换(包括平移,缩放,旋转,改变透明度)来实现动画效果,动画效果的定义可以使用xml,也可 ...
- 实现RecycleView动态使列表item可以点击或不可点击切换
效果 这里讲的是第二个button跳转的Activity,这里和上一篇不同之处在于可以item点击.item子控件点击 继承BaseAdapter 同样也要继承BaseAdapter public c ...