您的位置:首页 > 产品设计 > UI/UE

[uva-10142] Australian Voting (queue&vector)

2017-09-27 22:24 537 查看
今天下午到晚上才AC,

遇到了一些问题有:

1.runtime error 没有考虑只有一个候选人

2.compile error 没有加

3.WA的情况分别是

1)选票废掉之后选的还是淘汰的人

2)超过百分之五十写的>=…..

3)科科。必须按选号从小到大不能乱序搞TAT

4.系统一直报warning应该是还要把size转下int,不过我懒,警告就警告吧。

真的是很好的一道题你看

让我尝试了几乎所有的报错!

MMP



吃凉皮凉皮去了

何以解忧唯有暴饮暴食

#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
struct candidate
{
string name;
int votingnum;
int tot;
candidate(string a="",int b=0,int c=0)
{name=a,votingnum=b,tot=c;}
};

bool cmp(candidate A, candidate B)
{
if(A.tot!=B.tot)
return A.tot<B.tot;
return A.votingnum<B.votingnum;
}

vector < queue<int> > ballot;
vector <candidate> Candi;
vector <candidate> Out;
int BallotTot,n;

bool judge()
{
int siz=Candi.size();
int DeleTot;

if(2*Candi[siz-1].tot>BallotTot)
return true;

DeleTot=Candi[0].tot;
while(!Candi.empty()&&Candi[0].tot==DeleTot)
{
Out.push_back(Candi[0]);
Candi.erase(Candi.begin());
}
if(Candi.empty())return true;
return false;
}

int main()
{
int t,i,j;
bool flag=false;
string input;
cin>>t;
while(t--)
{
cin>>n;
getline(cin,input);
Candi.clear();
ballot.clear();
ballot.resize(1100);
Out.clear();
for(i=1;i<=n;i++)
{
getline(cin,input);
Candi.push_back(candidate(input,i,0));
}

BallotTot=0;
while(getline(cin,input))
{
if(input=="")break;
int len=input.length();
int num=0;
for(i=0;i<len;i++)
{
if(input[i]>='0'&&input[i]<='9')
{
num=num*10+(input[i]-'0');
if(i==len-1)
ballot[BallotTot].push(num);
}
else
{
ballot[BallotTot].push(num);
num=0;
}
}BallotTot++;
}

for(i=0;i<BallotTot;i++)
{
int x=ballot[i].front();
Candi[x-1].tot++;
}
sort(Candi.begin(),Candi.end(),cmp);
while(!judge())
{
while(!Out.empty())
{
for(i=0;i<ballot.size();i++)
{
if(!ballot[i].empty()&&ballot[i].front()==Out[0].votingnum)
{
ballot[i].pop();
int x=ballot[i].front();
for(j=0;j<Candi.size();j++)
{
if(Candi[j].votingnum==x)
{
Candi[j].tot++;break;
}
//废掉的选票上变成了是淘汰的候选人
if(j==Candi.size()-1&&ballot[i].size()>1)
{
ballot[i].pop();
x=ballot[i].front();
j=-1;
}
}
}
}Out.erase(Out.begin());
}sort(Candi.begin(),Candi.end(),cmp);
}
int siz=Candi.size();

//空行
if(flag)cout<<endl;
else flag=true;
//输出
if(siz==0)
{
for(i=0;i<Out.size();i++)
cout<<Out[i].name<<endl;
}
else
{
cout<<Candi[siz-1].name<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  queue 队列 UVA