大一的时候做这个居然用的是数组,现在用map果然方便太多了,但还是因为一开始没注意有可能是负数导致,判断的时候出现了问题。
一共判断的时候有两轮,第一轮判断这个人的结果是不是最大值,如果是最大值,就要看它是不是第一个到达的,也即第二轮的成绩是不是大于或是等于最大值,如果满足条件,赶紧输出结果,就行了。最近做题被虐的都没人样了。。。
代码:
#include <iostream>
#include <map>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
//一开始没有考虑到负数的情况,出现了错误。出现负数的话,分数就会下降,之前的最大值就不会对。
map<string,int> round;
map<string,int> round2;
string name[1005];
int score[1005];
int main()
{
int count,i;
cin>>count;
round.clear();
int max = -1000005;
string max_name;
for(i=1;i<=count;i++)
{
cin>>name[i]>>score[i];
round[name[i]] += score[i];
}
for(i=1;i<=count;i++)
{
if(round[name[i]]>max)
{
max=round[name[i]];
}
}
for(i=1;i<=count;i++)
{
if(round[name[i]] == max)
{
round2[name[i]] += score[i];
if(round2[name[i]]>=max)//最先到达
{
cout<<name[i]<<endl;
return 0;
}
}
}
return 0;
}