大一的时候做这个居然用的是数组,现在用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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。