zoukankan      html  css  js  c++  java
  • 『题解』Codeforces2A Winner

    Portal

    Portal1: Codeforces

    Portal2: Luogu

    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 "( exttt{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 le n le 1000)), (n) is the number of rounds played. Then follow (n) lines, containing the information about the rounds in "( exttt{name score})" format in chronological order, where ( exttt{name}) is a string of lower-case Latin letters with the length from (1) to (32), and ( exttt{score}) is an integer number between (-1000) and (1000), inclusive.

    Output

    Print the name of the winner.

    Sample Input1

    3
    mike 3
    andrew 5
    mike 2
    

    Sample Output1

    andrew
    

    Sample Input2

    3
    andrew 3
    andrew 2
    mike 5
    

    Sample Output2

    andrew
    

    Description in Chinese

    Berland流行着纸牌游戏“Berlogging”,这个游戏的赢家是根据以下规则确定的:在每一轮中,玩家获得或失去一定数量的分数,在游戏过程中,分数被记录在“名称和得分”行中,其中名字是玩家的名字,得分是在这一轮中获得的分数。得分是负值意味着玩家失去了相应的分数。如果在比赛结束时只有一名玩家分数最多,他就是获胜者。如果两名或两名以上的玩家在比赛结束时都有最大的分数(m),那么其中首先获得至少(m)分的玩家胜利。开始时,每个玩家都是(0)分。保证在比赛结束时至少有一个玩家的分数为正。

    Solution

    把每个人的得分存到( exttt{map})里,然后求出最大得分,再寻找最先到达最大得分的人,即为获胜者。

    Code

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    
    using namespace std;
    
    const int INF = 0x3f3f3f3f, MAXN =  1005;
    int n, a[MAXN];
    string name[MAXN];
    map<string, int> Map1, Map2;
    int main() {
        scanf("%d", &n);
        for (int i = 0; i < n; i++) {
            cin >> name[i] >> a[i];
            Map1[name[i]] += a[i];
        }//映射到map里
        int Max = -INF;
        for (int i = 0; i < n; i++)
            if (Map1[name[i]] > Max) Max = Map1[name[i]];//求出最大得分
        for (int i = 0; i < n; i++) {
            Map2[name[i]] += a[i];
            if (Map2[name[i]] >= Max && Map1[name[i]] >= Max) {
                cout << name[i] << endl;//输出最先到最大得分的人
                return 0;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    解决span中的内容不换行
    javascript中apply、call和bind的区别
    vuex及其属性应用
    55.动态加载Html
    58.圆角图片
    57.动态添加子View(Java/XML两种方式)
    56.Java与js交互
    59.仿微信的图片浏览器
    64.判断当前线程是否是主线程
    61.自定义Indicator
  • 原文地址:https://www.cnblogs.com/shenxiaohuang/p/11217946.html
Copyright © 2011-2022 走看看