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存储到位需 ...
随机推荐
- KEIL、uVision、RealView、MDK、KEIL C51区别比较
KEIL uVision,KEIL MDK,KEIL For ARM,RealView MDK,KEIL C51,KEIL C166,KEIL C251 从接触MCS-51单片机开始,我们就知道有一个 ...
- jquery input只允许输入数字
$('#id').keyup(function(){ var tmptxt=$(this).val().replace(/\D|^0/g,''); $(this).val(tmptxt); });
- 点分治练习:不虚就是要AK
[题面] 不虚就是要AK(czyak.c/.cpp/.pas) 2s 128M czy很火.因为又有人说他虚了.为了证明他不虚,他决定要在这次比赛AK. 现在他正在和别人玩一个游戏:在一棵树上随机取两 ...
- n维立体空间建模
n维立体空间建模,基于网格技术,将整个地球信息整体封装,初始进行网格化,选取某一个网格,进行迭代, 迭代的子项依然是网格,迭代的次数为k,网格最终大小可以指定,这种指定决定了立体块的细化率,假设 ...
- liunx shell数字相加
#!/bin/bash num1= num2= num3= #echo $($num1+$num2+$num3)#错误写法 echo $[$num1+$num2+$num3] echo $(($num ...
- ios 中介者模式
中介设计模式在ios中普片应用于视图迁移 1,从xib中生成object对象,中介类为n个不同对象 @property(nonatomic,retain)IBOutlet NSObject *ob; ...
- 普通身份运行Tomcat
普通身份运行Tomcat 转载1 权限分配问题 su - username -c “command”这样的形式可以使用任意一个有执行权限的用户执行 -c后边的命令. 注意,- username中间 ...
- centos防火墙操作
centos防火墙基本操作 #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT#/sbin/iptables -I INPUT -p tcp -- ...
- jvisualvm图解
http://blog.csdn.net/a19881029/article/details/8432368 jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程分析. ...
- hdu2026.java字符
首字母变大写 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...