The winner of the card game popular in Berland "Berlogging" is determined according to the following rules. If at the end of the game there is only one player with the maximum number of points, he is the winner. The situation becomes more difficult if the number of such players is more than one. During each round a player gains or loses a particular number of points. In the course of the game the number of points is registered in the line "name score", wherenameis a player's name, andscoreis the number of points gained in this round, which is an integer number. If score is negative, this means that the player has lost in the round. So, if two or more players have the maximum number of points (say, it equals tom) at the end of the game, than wins the oneof themwho scored at leastmpoints first. Initially each player has 0 points. It's guaranteed that at the end of the game at least one player has a positive number of points.
InputThe first line contains an integer numbern(1 ≤ n ≤ 1000),nis the number of rounds played. Then follownlines, containing the information about the rounds in "name score" format in chronological order, wherenameis a string of lower-case Latin letters with the length from 1 to 32, andscoreis an integer number between -1000 and 1000, inclusive.
OutputPrint the name of the winner.
Sample test(s) input3 mike 3 andrew 5 mike 2output
andrewinput
3 andrew 3 andrew 2 mike 5output
andrew/*题意:给你每一轮的得分,让你找到最终的最高分,将那个人输出出来,如果多个人将第一个到达的输出出来(注意这里到达可能刚开始的分是大于最终得分的)*/
/*思路:将得分保存起来用两个map存放,第一个map找最终的最高分,第二个map找第一个>=(到达)最终最高分的那个人*/
#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
struct peo{
string name;
int score;
}nn[1010];
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
map <string, int> mp1, mp2;
int maxn = -0x3f3f3f3f;
for(int i = 0; i < n; i++){
cin >> nn[i].name;
scanf("%d", &nn[i].score);
mp1[nn[i].name] += nn[i].score;
}
for(map <string, int> :: iterator it = mp1.begin(); it != mp1.end(); it++){
if(it -> second >= maxn){
maxn = it -> second;
}
}
for(int i = 0; i < n; i++){
if((mp2[nn[i].name] += nn[i].score) >= maxn && mp1[nn[i].name] == maxn) //这里注意>=很坑啊,因为也许你之前的最高分大于等于最终的最高分有这两种情况
{
cout << nn[i].name << endl;
break;
}
}
}
return 0;
}