题意:#转
/*玩一个游戏,每轮有一个人得分,或减分,当所有轮完成后,找出分数最高的那个人,
如果是多个人,找出那些人中第一个达到最高分或更高的人。
先保存好每个人的分数,记录下究竟有那几个人会得奖,再次遍历所有回合,
找出第一个高于等于那个分数的且最终会得奖的人。
*/
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 6 struct point 7 { 8 char name[20]; 9 int num; 10 }a[1000],b[1000]; 11 char s[1000][35]; 12 int x[1000]; 13 14 int main() 15 { 16 int n,i,j; 17 while(~scanf("%d",&n)) 18 { 19 int d=0; 20 memset(a,0,sizeof(a)); 21 for(i=0;i<n;i++) 22 { 23 scanf("%s %d",s[i],&x[i]); 24 if(d) 25 { 26 for(j=0;j<d;j++) 27 if(!strcmp(a[j].name,s[i])) 28 { 29 a[j].num+=x[i]; 30 break; 31 } 32 if(j==d) 33 { 34 strcpy(a[d].name,s[i]); 35 a[d++].num=x[i]; 36 } 37 } 38 else 39 { 40 strcpy(a[0].name,s[i]); 41 a[0].num=x[i]; 42 d++; 43 } 44 } 45 int maxn=0; 46 for(i=0;i<d;i++) 47 maxn=max(maxn,a[i].num); 48 memset(b,0,sizeof(b)); 49 int dd=0; 50 for(i=0;i<n;i++) 51 { 52 if(dd) 53 { 54 for(j=0;j<dd;j++) 55 if(!strcmp(b[j].name,s[i])) 56 { 57 b[j].num+=x[i]; 58 if(b[j].num>=maxn&&a[j].num==maxn) 59 { 60 printf("%s ",s[i]); 61 return 0; 62 } 63 break; 64 } 65 if(j==dd) 66 { 67 strcpy(b[dd].name,s[i]); 68 b[dd].num=x[i]; 69 if(b[dd].num>=maxn&&a[dd].num==maxn) 70 { 71 printf("%s ",s[i]); 72 return 0; 73 } 74 dd++; 75 } 76 } 77 else 78 { 79 strcpy(b[0].name,s[i]); 80 b[0].num=x[i]; 81 if(x[i]>=maxn&&a[0].num==maxn) 82 { 83 printf("%s ",s[i]); 84 return 0; 85 } 86 dd++; 87 } 88 } 89 } 90 return 0; 91 }