CF2A Winner

2021-06-16 08:04

阅读:368

标签:color   stl   style   div   int   lan   pair   有一个   temp   

题目描述:

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

输入格式:

第一行包含整数n(1

第 2 ~ n+1 行,按照时间顺序输入“名称和得分”行的信息,其中名称是长度不大于 32 的小写字母组成的字符串,分数的绝对值不大于 1000。

输出格式:

输出获胜者的名称。

 

分析:利用map可以很快的解出这道题,在map中找value的最大值的时候,网上大部分的代码都是去遍历一遍,我在这里为了让自己更加熟练练习STL,就写了哥按照vaule排序的函数。另外,有可能会出现比赛结束后最大分相等的情况。所以我们就要结束之后再访问一遍,查找第一次大于等于最大分的情况。这也是m1出现的意义。。。

 1 #include 2 #include
 3 #include 4 #include 5 #include 6 #include 7 using namespace std;
 8 #define maxn 1010
 9 int MIN=-1000;
10 string name[maxn];
11 int score[maxn];
12 bool flag(pairstring,int>o1 , pairstring,int>o2){
13     return o1.second>o2.second;
14 }
15 mapstring,int> m,m1;/*m记录最大值,m1进行重新统计,找到第一次达到分数的人*/
16 int main(){
17     int n;
18     string name_max;//记录结果人名
19     cin>>n;
20     for( int i=0; i ){
21         cin>>name[i]>>score[i];
22         m[name[i]]+=score[i];
23     }
24     vectorstring,int> > dic(m.begin(),m.end());
25     sort(dic.begin(),dic.end(),flag);
26     int temp_maxn=dic[0].second;
27     for(int i=0; i ){
28         m1[name[i]]+=score[i];//重新进行统计
29         if(m[name[i]]==temp_maxn&&m1[name[i]]>=temp_maxn){
30             name_max=name[i];
31             break;
32         }
33     }
34     coutname_max;
35     return 0;
36 }

 

CF2A Winner

标签:color   stl   style   div   int   lan   pair   有一个   temp   

原文地址:https://www.cnblogs.com/Bravewtz/p/10349629.html


评论


亲,登录后才可以留言!