CodeForces 2A Winner
2016-04-21 19:50
316 查看
Winner
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status Practice CodeForces 2A
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
Output
Input
Output
View Code
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status Practice CodeForces 2A
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=1005; struct Node { string name; int grade; } stu[maxx]; int main() { int n; string ans="0"; scanf("%d",&n); string name; int max=0; map<string,int>m; for(int i=0; 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,0)); max=iter->second; } else if(iter->second==max) { nm.insert(pair<string,int>(iter->first,0)); } } m.clear(); //cout<<max; for(int i=0; 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; }
View Code
相关文章推荐
- poj1080——Human Gene Functions(LCS变形)
- XML概述
- 虚拟文件系统
- rabbitmq 添加远程访问功能
- 归并排序
- uvalive4945(dp,贪心)
- res文件夹和assets文件夹
- 通过MenuItem跳到别的界面以后再返回时原activity被Destroy的解决方法
- js基本语法--排序,冒泡排序法
- shell脚本的字符串截取
- css3属性中background-clip与background-origin的用法释疑
- 生产者-消费者问题
- POJ 3468 A Simple Problem with Integers(线状树经典模型之lazy操作)
- 兴趣清单
- <<你最喜欢做什么--兴趣问题清单>>总结
- SSH导入jar包
- 几种动态分配内存的方法及区别
- 随机产生四则运算
- 257. Binary Tree Paths
- 互联网金融传销为何泛滥?