题目描述
ACM是一条很艰难的路,走到最后你的同伴会越来越少,因为很多人惧怕困难,不愿意去挑战难题,想要成为最后的赢家,务必静下心认真看书做题、温故知新。
现在有一个游戏的最后的赢家是根据以下规则确定的。如果在游戏结束时只有一个玩家拥有最大点数,那么他就是赢家。如果这类玩家的数量超过一个,情况就会变得更加困难。在每一轮比赛中,玩家获得或失去一定数量的积分。在游戏过程中,点数记录在“name score”行中,其中name是玩家的名字,score是本轮获得的点数,它是一个整数。如果比分为负,这意味着这名球员在这轮比赛中输了。所以,如果两个或两个以上的玩家在游戏结束时拥有最多的点数(例如,它等于m),那么赢得其中一个至少先得m分的玩家。最初每个玩家都有0分。保证在比赛结束时,至少有一名选手得分为正数。
输入
第一行包含一个整数n(1≤1000)。然后接下来n行,包含按时间顺序排列的“name score”格式的轮数信息,其中name是一个长度从1到32的小写拉丁字母字符串,score是一个介于-1000和1000之间的整数,包括-1000和1000。
输出
打印出最后赢家的姓名。
样例输入
3
mike 3
andrew 5
mike 2
样例输出
andrew
代码(c++版)
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,temp,Max=0;
cin>>n;
map<string,int> mp;
string str,ans;
for(int i=0; i<n; i++) {
cin>>str>>temp;
mp[str]+=temp;
if(mp[str]>Max) {
Max=mp[str];
ans=str;
}
}
cout<<ans<<endl;
return 0;
}
(Java版)
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int cnt=cin.nextInt();
int Max=0;
String str,ans=null;
Integer temp;
Map<String,Integer> mp=new HashMap<String, Integer>();
for(int i=0;i<cnt;i++){
str=cin.next();
temp=cin.nextInt();
if(mp.containsKey(str)){
mp.put(str,temp+mp.get(str));
}else {
mp.put(str, temp);
}
if(mp.get(str)>Max){
ans=new String(str);
Max=mp.get(str);
}
}
System.out.println(ans);
}
}