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. JavaScript高级程序设计36.pdf

    TreeWalker TreeWalker是NodeIterator的更高级的版本,除了包括nextNode()和previousNode()在内的相同功能外,这个类型还提供了用于不同方向上遍历DOM ...

  2. Lambda表达式与匿名方法

    在C#2中,由于有了方法组,匿名方法,类型的协变和抗变,使得运用delegate变得很容易,在注册事件时代码变得简单易读,但是在C# 2中,代码仍然有点臃肿,大块的匿名方法会降低代码的可读性,一般我们 ...

  3. 矩阵乘法 and BIOS loads MBR into 0x7C00?

    tianpeng <再谈矩阵与矩阵乘法> 讲的也好 矩阵乘矩阵 这个结果是怎么算出来的? 第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积 ...

  4. C语言 处理文件

    刚学习C语言不久,运用C语言处理各种文件.这里列出,处理文件所需的大部分函数,已经整理的笔记,使用的注意事项.

  5. ios 中的半屏幕底部弹出框

    static UIView *modalView;if (modalView) { [modalView removeFromSuperview]; modalView = nil; return; ...

  6. 【转】Android Studio Essential Training

    http://ask.android-studio.org/?/explore/category-video Android Studio Essential Training内容包括:- Andro ...

  7. EasyUI-增删改操作

    最近公司要用easyui,这里自己看了官网几篇文章,遇到些问题,大多数的问题都是敲代码的时候笔误,其他有些地方确实需要注意一下,这里做些笔记. 1.在mysql中建好表之后修改id字段为递增字段,发现 ...

  8. Lucene入门的基本知识(四)

    刚才在写创建索引和搜索类的时候发现非常多类的概念还不是非常清楚,这里我总结了一下. 1 lucene简单介绍  1.1 什么是lucene  Lucene是一个全文搜索框架,而不是应用产品.因此它并不 ...

  9. 【Android XMPP】 学习资料收集贴(持续更新)

    系列一: 基于xmpp openfire smack开发之openfire介绍和部署[1] 基于xmpp openfire smack开发之smack类库介绍和使用[2] 基于xmpp openfir ...

  10. Linux shell的&&和||--转载

    Linux shell的&&和||   shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中.当 $? == 0 时,表示执行成功:当 $? ...