Codeforces 2A. Winner

题意:找出胜利者,即总得分最高的。当有不止一个最高分的人比较坑,输出最高分中的人,条件是,这个人在过程中是第一个获得大于等于最高分的人。(有点绕,仔细理解)

题目链接:http://codeforces.com/problemset/problem/2/A

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <set>

using namespace std;

string name[1005];
string st;
int a[1005];

map<string,int>s;

int main()
{
    int n,x;
    string allname[1005];
    cin>>n;

    string STR;
    int k=1;
    for(int i=1; i<=n; i++)
    {
        cin>>st>>x;
        a[i]=x;
        allname[i]=st;
        if(s.find(st)==s.end())
        {
            s[st]=0;
            name[k++]=st;
        }
        s[st]+=x;
    }
    int Max=-1e9;
    for(int i=1; i<k; i++)
    {
        if(s[name[i]]>Max)
        {
            Max=s[name[i]];
        }
    }
    int kk=1;
    string maxname[1005];
    map<string,int>ans;
    for(int i=1; i<k; i++)
    {
        if(s[name[i]]==Max)
        {
            maxname[kk++]=name[i];
            ans[name[i]]=0;
        }
    }
    int num=kk-1;
    int t=0;
    map<string,int>fuck;
    for(int i=1; i<=n; i++)
    {
        if(ans.find(allname[i])!=ans.end())
        {
            if(fuck.find(allname[i])==fuck.end())
            {
                fuck[allname[i]]=0;
            }
            fuck[allname[i]]+=a[i];
            if(fuck[allname[i]]>=Max)
            {
                STR=allname[i];
                break;
            }
        }
    }

    cout<<STR<<endl;

    return 0;
}
原文地址:https://www.cnblogs.com/mengzhong/p/4957195.html