Winner

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Description

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", where name is a player's name, and score is 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 to m) at the end of the game, than wins the one of them who scored at least m points 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 number n (1  ≤  n  ≤  1000), n is the number of rounds played. Then follow n lines, containing the information about the rounds in "name score" format in chronological order, where name is a string of lower-case Latin letters with the length from 1 to 32, and score is an integer number between -1000 and 1000, inclusive.

Output

Print the name of the winner.

Sample Input

Input
3
mike 3
andrew 5
mike 2
Output
andrew
Input
3
andrew 3
andrew 2
mike 5
Output
andrew

这道题不难,主要是先确定最大的分数是多少,然后确定最后达到最大分数的人有那些。然后再次模拟整个过程,在达到最大分数的人中选出第一个达到或者超过最大分数的人。

#include<iostream>
#include<map>
using namespace std;
const int maxx=;
struct Node
{
string name;
int grade;
} stu[maxx];
int main()
{
int n;
string ans="";
scanf("%d",&n);
string name;
int max=;
map<string,int>m;
for(int i=; i<n; i++)
{
string name;
int a;
cin>>name>>a;
stu[i].name=name;
stu[i].grade=a;
if(m.count(name))
m[name]+=a;
else
{
m.insert(pair<string,int>(name,a));
}
}
map<string,int>nm;
map<string,int>::iterator iter;
for(iter=m.begin(); iter!=m.end(); iter++)
{
// cout<<iter->first<<" "<<iter->second<<endl;
if(iter->second>max)
{
nm.clear();
nm.insert(pair<string,int>(iter->first,)); max=iter->second;
}
else if(iter->second==max)
{
nm.insert(pair<string,int>(iter->first,));
}
}
m.clear();
//cout<<max;
for(int i=; i<n; i++)
{
if(m.count(stu[i].name))
{
m[stu[i].name]+=stu[i].grade;
if((m[stu[i].name]>=max)&&(nm.count(stu[i].name)))
{
ans=stu[i].name;
break;
}
}
else
{
m.insert(pair<string,int>(stu[i].name,stu[i].grade));
if((m[stu[i].name]>=max)&&(nm.count(stu[i].name)))
{
ans=stu[i].name;
break;
}
}
}
cout<<ans<<endl;
}

最新文章

  1. NOIP2012同余方程
  2. JAVA String,StringBuffer与StringBuilder的区别??
  3. echarts标准饼图解读(一)——提示框(tooltip)配置
  4. Spring JdbcTemplate批量操作数据库
  5. PHP面向对象(OOP):__set(),__get(),__isset(),__unset()四个方法的应用
  6. div中央
  7. Nginx 配置反向代理后,页面中取绝对URL地址的问题显示代理端口
  8. Ext.js入门:面板(五)
  9. Eclipse EE下载安装与配置
  10. python之协程函数、递归、二分法
  11. POJ-3414.Pots.(BFS + 路径打印)
  12. mybatis 初步使用(IDEA的Maven项目, 超详细)
  13. Frosh Week
  14. display属性的表格布局相关属性
  15. UVA-1572 Self-Assembly (图+拓扑排序)
  16. GlusterFS部署
  17. C#开发之反射的简单使用
  18. 浅谈Android保护技术__代码混淆
  19. Linux 系统自动备份数据库及定时任务的设置
  20. dotnet core 入门

热门文章

  1. 初学数位DP--hdu 2089
  2. TextView子类的常用属性
  3. TensorFlow 入门 下(自用)
  4. [Functional Programming] Working with two functors(Applicative Functors)-- Part2 --liftAN
  5. Jmeter--google plugin插件监控被測系统资源方法
  6. javascript代码在线测试
  7. tomcat服务器开启gzip功能的方法
  8. JAVA生成解析二维码
  9. 查看sqlserver 2008中性能低下的语句
  10. CSDN日报20170401 ——《假设你还是“程序猿”,我劝你别创业!》