A
/*
思路:模拟
分析:
1 题目要求的在游戏结束后最大的点的值的玩家,或者具有相同点值的情况下最早出现
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
#define MAXN 1010
#define N 50
int n , pos;
int vis[MAXN];
int p[MAXN];
char input[MAXN][N];
char name[MAXN][N];
map<string , int>mp;
int main(){
int max , cnt;
while(scanf("%d%*c" , &n) != EOF){
/*第一次输入*/
for(int i = 0 ; i < n ; i++)
scanf("%s %d%*c" , input[i] , &p[i]);
/*第一次模拟*/
max = 0 , pos = 0;
for(int i = 0 ; i < n ; i++){
int flag = -1;
for(int j = 0 ; j < pos ; j++){
if(!strcmp(name[j] , input[i])){
flag = j;
break;
}
}
if(flag == -1)
strcpy(name[pos++] , input[i]);
mp[input[i]] += p[i];
}
memset(vis , 0 , sizeof(vis));
for(int i = 0 ; i < pos ; i++)
max = max < mp[name[i]] ? mp[name[i]] : max;
for(int i = 0 ; i < pos ; i++){
if(max == mp[name[i]])
vis[i] = 1;
}
/*第二次模拟*/
mp.clear();
for(int i = 0 ; i < n ; i++){
mp[input[i]] += p[i];
int tmp = 0;
for(int i = 0 ; i < pos ; i++){
if(tmp < mp[name[i]]){
tmp = mp[name[i]];
cnt = i;
}
}
if(tmp >= max && vis[cnt])
break;
}
printf("%s\n" , name[cnt]);
}
return 0;
}