题目描述:
在 Berland 流行着纸牌游戏 “Berlogging” ,这个游戏的赢家是根据以下规则确定的:在每一轮中,玩家获得或失去一定数量的分数,在游戏过程中,分数被记录在“名称和得分”行中,其中名字是玩家的名字,得分是在这一轮中获得的分数。得分是负值意味着玩家失去了相应的分数。如果在比赛结束时只有一名玩家分数最多,他就是获胜者。如果两名或两名以上的玩家在比赛结束时都有最大的分数 m,那么其中首先获得至少 m 分的玩家胜利。开始时,每个玩家都是0分。保证在比赛结束时至少有一个玩家的分数为正。
输入格式:
第一行包含整数n(1 <= n <= 1000),n 是游戏进行的的回合数。
第 2 ~ n+1 行,按照时间顺序输入“名称和得分”行的信息,其中名称是长度不大于 32 的小写字母组成的字符串,分数的绝对值不大于 1000。
输出格式:
输出获胜者的名称。
输入输出样例
输入样例#1: |
|
输出样例#1: |
|
输入样例#2: |
|
输出样例#2: |
|
题解:
#include<bits/stdc++.h>
#define MAXN 1010
using namespace std;
int n,i,j,x,maxn=-1000,sc[MAXN];
string s,maxs,stu[MAXN];
map<string,int> m,m1;
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++){
cin >> stu[i] >> sc[i];
m[stu[i]]+=sc[i];
}
for(i=1;i<=n;i++) maxn=max(maxn,m[stu[i]]);
for(i=1;i<=n;i++){
m1[stu[i]]+=sc[i];
if(m[stu[i]]==maxn&&m1[stu[i]]>=maxn){
maxs=stu[i];
break;
}
}
cout << maxs << endl;
}