codeforce 2A

A. Winner time limit per test 1 second memory limit per test 64 megabytes input standard input output standard output

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.

Input

The 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.

Output

Print the name of the winner.

Sample test(s) input
3
mike 3
andrew 5
mike 2
output
andrew
input
3
andrew 3
andrew 2
mike 5
output
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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值