CF2A Winner

题目描述:

在 Berland 流行着纸牌游戏 “Berlogging” ,这个游戏的赢家是根据以下规则确定的:在每一轮中,玩家获得或失去一定数量的分数,在游戏过程中,分数被记录在“名称和得分”行中,其中名字是玩家的名字,得分是在这一轮中获得的分数。得分是负值意味着玩家失去了相应的分数。如果在比赛结束时只有一名玩家分数最多,他就是获胜者。如果两名或两名以上的玩家在比赛结束时都有最大的分数 m,那么其中首先获得至少 m 分的玩家胜利。开始时,每个玩家都是0分。保证在比赛结束时至少有一个玩家的分数为正。

 

输入格式:

第一行包含整数n(1 <= n <= 1000),n 是游戏进行的的回合数。

第 2 ~ n+1 行,按照时间顺序输入“名称和得分”行的信息,其中名称是长度不大于 32 的小写字母组成的字符串,分数的绝对值不大于 1000。

 

输出格式: 

输出获胜者的名称。

 

输入输出样例 

输入样例#1:
3
mike 3
andrew 5
mike 2
输出样例#1:
andrew
输入样例#2:
3
andrew 3
andrew 2
mike 5
输出样例#2:
andrew

 

题解:

#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; 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值