翻译 + 题解
2024-03-21 20:27:23
发布于:陕西
23阅读
0回复
0点赞
题面翻译:
题目描述:
在 Berland 流行着纸牌游戏 Berlogging
,这个游戏的赢家是根据以下规则确定的:
- 在每一轮中,玩家获得或失去一定数量的分数,在游戏过程中,分数被记录在
名称和得分
行中,其中名字是玩家的名字,得分是在这一轮中获得的分数。得分是负值意味着玩家失去了相应的分数。 - 如果在比赛结束时只有一名玩家分数最多,他就是获胜者。
- 如果两名或两名以上的玩家在比赛结束时都有最大的分数 ,那么其中首先获得至少 分的玩家胜利。开始时,每个玩家都是 分。
保证在比赛结束时至少有一个玩家的分数为正。
【输入格式】
第一行包含整数 ,表示是游戏进行的的回合数。
第 行,按照时间顺序输入 名称和得分
行的信息,其中名称是长度不大于 的小写字母组成的字符串,分数的绝对值不大于 。
【输出格式】
输出获胜者的名称。
样例 #1
样例输入 #1
3
mike 3
andrew 5
mike 2
样例输出 #1
andrew
样例 #2
样例输入 #2
3
andrew 3
andrew 2
mike 5
样例输出 #2
andrew
题解:
有关这一题,其实是一道非常水的map,没有学过的同学可以去百度搜来学习一下。不过,我在这里也介绍一下。
1,如何开一个map。
这里需要引用c++ stl库
#include<map>
using namespace std;
map<作为数组名称的变量类型,储存的变量类型> mp;
int cnt;
string s;
2,如何使用map.
举个例子,需要储存以一个字符串为名字的int数组。
mp[s]=++cnt;
然后做这题就需要知道这些,其他细节在代码中有。
#include<bits/stdc++.h>
using namespace std;
map<string,int> mp,mpp;
int n,a[100001],maxn=-99999999;
string s[100001],s1;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s[i]>>a[i];
mp[s[i]]+=a[i];//记录数值
}
for(int i=1;i<=n;i++)
{
maxn=max(maxn,mp[s[i]]);//取最大
}
for(int i=1;i<=n;i++)//谁先到达maxn的就取谁
{
mpp[s[i]]+=a[i];
if(mp[s[i]]==maxn&&mpp[s[i]]>=maxn)
{
s1=s[i];
break;
}
}
cout<<s1<<endl;
return 0;
}
这里空空如也
有帮助,赞一个