原题链接:
http://codeforces.com/problemset/problem/2/A
题意:
游戏结束后,得分最多(用maxSco表示最大分)者获胜(分数可为负),若有多个人分数最多,则得分先达到maxSco者获胜;
这里特殊说一下:
在游戏过程中玩家可能得分也肯能减分;
那么当多个人是maxSco时,先达到maxSco者获胜,这个先达到应该这样理解:
如数据:a 2
b 1
a -1
a最开始就是2分是由于后来减了1分才与b同分;根据正常思想是b获胜;
实则是a获胜因为a比b先达到(甚至大于)maxSco的人;
代码:
1 #include<cstdio> 2 #include<iostream> 3 #include<string> 4 #include<cstring> 5 6 using namespace std; 7 8 struct sta{ 9 10 string name; 11 int sum; 12 int index; 13 }a[1002],b[1002],c[1002],ans; 14 15 int main() 16 { 17 int n; 18 int i,j,d=-1; 19 int maxSco=-1000003,minIndex; 20 ans.sum=-1000003; 21 cin>>n; 22 for(i=0;i<n;i++) 23 { 24 cin>>b[i].name>>b[i].sum; 25 for(j=0;j<=d;j++) 26 { 27 if(a[j].name==b[i].name) 28 { 29 a[j].sum+=b[i].sum; 30 break; 31 } 32 } 33 if(d==j-1) 34 { 35 a[++d].name=b[i].name; 36 a[d].sum+=b[i].sum; 37 } 38 } 39 for(i=0;i<=d;i++) 40 { 41 if(maxSco<a[i].sum) 42 maxSco=a[i].sum; 43 } 44 d=-1; 45 for(i=0;i<n;i++) 46 { 47 for(j=0;j<=d;j++) 48 { 49 if(c[j].name==b[i].name) 50 { 51 c[j].sum+=b[i].sum; 52 if(c[j].sum>=maxSco&&c[j].index==-1) 53 { 54 c[j].index=i; 55 } 56 break; 57 } 58 } 59 if(d==j-1) 60 { 61 c[++d].name=b[i].name; 62 c[d].sum=b[i].sum; 63 c[d].index=-1; 64 if(c[d].sum>=maxSco) 65 c[d].index=i; 66 } 67 } 68 for(i=0; i<=d; i++) 69 { 70 if(ans.sum<c[i].sum||(ans.sum==c[i].sum&&c[i].index<ans.index)) 71 ans=c[i]; 72 } 73 cout<<ans.name<<endl; 74 return 0; 75 }
--------------欢迎评论----------------