CF2A Winner

https://www.luogu.com.cn/problem/CF2A
涉及知识点:模拟,字符串,map映射
黄色题
 
思路:
一.输入名字和得分(用map定义)
二.计算出各个人的总分
三.算出最后最大的分数
四.重点:因为题目中说 "如果两名或两名以上的玩家在比赛结束时都有最大的分数m,那么其中首先获得至少m分的玩家胜利",最后如果有两名以上的玩家就要从头算起,找到第一个大于或等于最高分的玩家,为什么不直接用最后的总分判断?因为可能受到负分的影响。
 
代码:
#include<bits/stdc++.h>
using namespace std;
int n,i,j,k[1001],maxn=-100000000000;
string x[1001];
map<string,int> m;
map<string,int> a;
int main()
{
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>x[i]>>k[i];
        m[x[i]]+=k[i];
        a[x[i]]+=k[i]; 
    }
    for(i=1;i<=n;i++)
    {
        maxn=max(maxn,m[x[i]]);
        m[x[i]]=0;
    }
    for(i=1;i<=n;i++)
    {
        m[x[i]]+=k[i];
        if(m[x[i]]>=maxn&&a[x[i]]==maxn) {cout<<x[i];return 0;}
                //这里需要注意,m[x[i]]之后不能用=,因为题目的意思
        //是那么其中首先获得至少(重点) m 分的玩家胜利 
    }
    return 0;
}

 

posted @ 2022-07-13 15:06  -イレイナ  阅读(25)  评论(0)    收藏  举报