Codeforces 2A Winner (map运用)


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)
Prev 
Submit  Status  Statistics  Discuss
  Next
Type: 
None
  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
3
mike 3
andrew 5
mike 2
Output
andrew
Input
3
andrew 3
andrew 2
mike 5
Output
andrew

Source

Codeforces Beta Round #2
题意:大概就是说一个报数的游戏,没人报一个数字,游戏结束后数字之和最大的获胜,如果相同,则先报的胜利.

此题可用数组模拟,但是有点麻烦,用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;
}



你可能感兴趣的:(codeforces,winner,2A,map运用)