题目链接: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%% ",men[i].name,men[i].ans); 51 } 52 return 0; 53 }