Uva-10142-Australian Voting

来源:互联网 发布:美橙互联怎么解析域名 编辑:程序博客网 时间:2024/05/07 04:00

这个题输入处理比较麻烦,就是选举情况的一个模拟~

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=25;char str[maxn][100],in[1100];int n,cnt,total,vo[1100][maxn],num[110];bool del[maxn];void GetNum(){    int len=strlen(in),val=0,num=0;    for(int i=0;i<len;i++)    {if(in[i]>='0'&&in[i]<='9')    val=val*10+in[i]-'0';else{    vo[cnt][num++]=val;    val=0;}    }    vo[cnt][num++]=val;    cnt++;}void Solve(){    int res=n,total=0;    while(res>1)    {total=0;memset(num,0,sizeof(num));for(int i=0;i<cnt;i++)    for(int j=0;j<n;j++)if(!del[vo[i][j]]){    num[vo[i][j]]++;    total++;    break;}for(int i=1;i<=n;i++)    if(!del[i]&&num[i]*2>total)    {printf("%s\n",str[i]);return ;    }int maxi=0,mini=1<<29;for(int i=1;i<=n;i++)    if(!del[i])    {maxi=max(maxi,num[i]);mini=min(mini,num[i]);    }if(maxi==mini)    break;for(int i=1;i<=n;i++)    if(num[i]==mini)    {res--;del[i]=1;    }    }    for(int i=1;i<=n;i++)if(!del[i])    printf("%s\n",str[i]);}int main(){    int T,flag=0;    scanf("%d",&T);    while(T--)    {scanf("%d",&n);getchar();memset(del,0,sizeof(del));for(int i=1;i<=n;i++)    gets(str[i]);cnt=0;while(gets(in)!=NULL){    if(!(in[0]>='0'&&in[0]<='9'))    break;    GetNum();}if(flag)    printf("\n");Solve();flag=1;    }    return 0;}


原创粉丝点击