Winner
Time Limit: 1000ms
Memory Limit: 65536KB
This problem will be judged on CodeForces.
Original ID: 2A
64-bit integer IO format: %I64d
Java class name: (Any)
Submit Status Statistics Discuss
Type:
None Graph Theory
2-SAT Articulation/Bridge/Biconnected Component
Cycles/Topological Sorting/Strongly Connected Component
Shortest Path
Bellman Ford Dijkstra/Floyd Warshall
Euler Trail/Circuit
Heavy-Light Decomposition Minimum Spanning Tree
Stable Marriage Problem
Trees Directed Minimum Spanning Tree
Flow/Matching
Graph Matching Bipartite Matching
Hopcroft–Karp Bipartite Matching
Weighted Bipartite Matching/Hungarian Algorithm
Flow
Max Flow/Min Cut Min Cost Max Flow
DFS-like
Backtracking with Pruning/Branch and Bound
Basic Recursion IDA* Search
Parsing/Grammar Breadth First Search/Depth First Search
Advanced Search Techniques
Binary Search/Bisection Ternary Search
Geometry
Basic Geometry Computational Geometry
Convex Hull
Pick‘s Theorem Game Theory
Green Hackenbush/Colon Principle/Fusion Principle
Nim Sprague-Grundy Number
Matrix Gaussian Elimination
Matrix Exponentiation Data Structures
Basic Data Structures Binary Indexed Tree
Binary Search Tree
Hashing Orthogonal Range Search
Range Minimum Query/Lowest Common Ancestor
Segment Tree/Interval Tree Trie Tree
Sorting
Disjoint Set String
Aho Corasick Knuth-Morris-Pratt
Suffix Array/Suffix Tree Math
Basic Math Big Integer Arithmetic
Number Theory Chinese Remainder Theorem
Extended Euclid
Inclusion/Exclusion Modular Arithmetic
Combinatorics
Group Theory/Burnside‘s lemma Counting
Probability/Expected Value
Others Tricky
Hardest Unusual
Brute Force Implementation
Constructive Algorithms Two Pointer
Bitmask Beginner
Discrete Logarithm/Shank‘s Baby-step Giant-step Algorithm
Greedy Divide and Conquer
Dynamic Programming
Tag it!
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
3mike 3andrew 5mike 2
Output
andrew
Input
3andrew 3andrew 2mike 5
Output
andrew
Source
题意:大概就是说一个报数的游戏,没人报一个数字,游戏结束后数字之和最大的获胜,如果相同,则先报的胜利.
此题可用数组模拟,但是有点麻烦,用STL里的map可以很快解决此问题.
AC代码:
#include <iostream> #include <cstring> #include <map> using namespace std; map<string,int>m1,m2; string name[1010]; int score[1010]; int main() { int n; cin>>n; for(int i=0; i<n; i++) { cin>>name[i]>>score[i]; m1[name[i]]+=score[i]; } int maxx=-1005; for(int i=0;i<n;i++) { if(m1[name[i]]>maxx) maxx=m1[name[i]]; } for(int i=0;i<n;i++) { m2[name[i]]+=score[i]; if(m2[name[i]]>=maxx&&m1[name[i]]>=maxx) { cout<<name[i]<<endl; break; } } return 0; }
网上看到了q神的代码,菜鸟要学习一下
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #include<map> using namespace std; const int MAXN=1005; string s[MAXN]; int c[MAXN]; map<string,int>mp; int main() { ios::sync_with_stdio(false); int n; cin>>n; for(int i=0; i<n; i++) cin>>s[i]>>c[i]; for(int i=0; i<n; i++) mp[s[i]]+=c[i]; int res=0; for(map<string,int>::iterator itr=mp.begin(); itr!=mp.end(); itr++) res=max(res,itr->second); for(map<string,int>::iterator itr=mp.begin(); itr!=mp.end();) { if(itr->second !=res) mp.erase(itr++);//函数删除在pos位置的元素 else (itr++)->second =0; } for(int i=0; i<n; i++) if(mp.find(s[i])!=mp.end()) { mp[s[i]]+=c[i]; if(mp[s[i]]>=res) { cout<<s[i]<<endl; return 0; } } return 0; }