首页 > 代码库 > HNU 12845 Ballot Analyzing Device

HNU 12845 Ballot Analyzing Device

题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12845&courseid=270

解题报告:有m个认给n个人投票,n个认位置是固定的,输入一行字符,X表示会投给这个人,例如X....这个表示会投给第一个人,然后让你分别求出这n个人分别占总

票数的百分之几,如果两个人票数相同,则按照原来固定的顺序。

水题,注意任意一个人投的票要有效的话必须满足至少并且只能投一个人。

 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstdlib> 6 using namespace std; 7 struct node 8 { 9     char name[100];10     double num,ans;11     int cixu;12 }men[15];13 char str[15];14 bool cmp(node a,node b)15 {16     if(a.num == b.num)17     return a.cixu < b.cixu;18     return a.num > b.num;19 }20 int main()21 {22     int n,m;23     while(scanf("%d%d",&n,&m)!=EOF)24     {25             for(int i = 0;i < n;++i)26             {27                 scanf("%s",men[i].name);28                 men[i].num = 0;29                 men[i].cixu = i;30             }31             strcpy(men[n].name,"Invalid");32             int tt = m;33             while(tt--)34             {35                 scanf("%s",str);36                 int f = -1;37                 for(int i = 0;i < n;++i)38                 if(str[i] == X)39                 {40                     if(f == -1) f = i;41                     else f = n;42                 }43                 if(f == -1) f = n;44                 men[f].num++;45             }46             for(int i = 0;i <= n;++i)47             men[i].ans = 100.0 * men[i].num /  (double)m;48             sort(men,men+n,cmp);49             for(int i = 0;i <= n;++i)50             printf("%s %.2lf%%\n",men[i].name,men[i].ans);51     }52     return 0;53 }
View Code