CF2A Winner
https://www.luogu.com.cn/problem/CF2A
涉及知识点:模拟,字符串,map映射
黄色题
涉及知识点:模拟,字符串,map映射
黄色题
思路:
一.输入名字和得分(用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; }