codeforces 2A-Winner

mac2024-10-30  9

题意

n轮比赛,记录选手“姓名 得分”,比赛结束后,输出得分最高的选手姓名,如果有同分,则输出第一个获得得分最高的选手姓名

题解

使用STL的map进行姓名和得分匹配,记录选手的最后得分p遍历后获得最大得分maxn重新进行轮次遍历,若选手最后得分超过最大值maxn,并且轮次遍历过程中的得分超过最大值maxn,则输出该选手的姓名并跳出遍历。

由于存在得分为负的情况,所以判断条件需大等于maxn

知识点

map的迭代器的使用: map<string,int>::iterator it; for(it=p.begin();it!=p.end();it++) cout<<it->first <<" "<<it->second<<endl; 逻辑的思考。注意重新模拟轮次的时候,很容易忽略的条件,就是判断最后得分一定要超过maxn,因为有可能该选手之前获得了最高分,但是之后几局疯狂扣分,最后导致最后的得分可能不是最高的。

代码

#include <iostream> #include <map> #include <string> using namespace std; int main(){ int t; string name[1001]; int score[1001],maxn=0; map<string,int> p,q; map<string,int>::iterator it; cin>>t; for(int i=0;i<t;i++){ cin>>name[i]>>score[i]; p[name[i]]+=score[i]; } for(it=p.begin();it!=p.end();it++){ maxn=max(maxn,it->second); } for(int i=0;i<t;i++){ q[name[i]]+=score[i]; if(p[name[i]]>=maxn&&q[name[i]]>=maxn){ cout<<name[i]<<endl; break; } } return 0; }
最新回复(0)