题意:找出胜利者,即总得分最高的。当有不止一个最高分的人比较坑,输出最高分中的人,条件是,这个人在过程中是第一个获得大于等于最高分的人。(有点绕,仔细理解)
题目链接:http://codeforces.com/problemset/problem/2/A
#include <iostream> #include <cstdio> #include <cstring> #include <map> #include <set> using namespace std; string name[1005]; string st; int a[1005]; map<string,int>s; int main() { int n,x; string allname[1005]; cin>>n; string STR; int k=1; for(int i=1; i<=n; i++) { cin>>st>>x; a[i]=x; allname[i]=st; if(s.find(st)==s.end()) { s[st]=0; name[k++]=st; } s[st]+=x; } int Max=-1e9; for(int i=1; i<k; i++) { if(s[name[i]]>Max) { Max=s[name[i]]; } } int kk=1; string maxname[1005]; map<string,int>ans; for(int i=1; i<k; i++) { if(s[name[i]]==Max) { maxname[kk++]=name[i]; ans[name[i]]=0; } } int num=kk-1; int t=0; map<string,int>fuck; for(int i=1; i<=n; i++) { if(ans.find(allname[i])!=ans.end()) { if(fuck.find(allname[i])==fuck.end()) { fuck[allname[i]]=0; } fuck[allname[i]]+=a[i]; if(fuck[allname[i]]>=Max) { STR=allname[i]; break; } } } cout<<STR<<endl; return 0; }