思路:初始化学校成绩数组school[100000],其中第i位代表第i个学校的成绩,且初始化为0;之后输入N以及N位参赛者的数据,输入时将对应学校的成绩+1,输入完毕后,遍历school数组并输出成绩最大的学校序号以及成绩。代码如下:
#include<cstdio>
int school[100000]={0};
int main(){
int n;
int schoolnum,score,size=0;
scanf("%d",&n);
while(n--){
scanf("%d%d",&schoolnum,&score);
school[schoolnum]+=score;
if(schoolnum>size){
size=schoolnum;
}
}
int max=0,maxnum=0;
for(int i=1;i<size+1;i++){
if(school[i]>max){
max=school[i];
maxnum=i;
}
}
printf("%d %d\n",maxnum,max);
}
提交时第三个测试点无法通过,发现将maxnum的初始化值改为1即可,因为这里的位置为1是一个有效值,但只要n>0(合法输入),之后的循环肯定会进入,既肯定进行maxnum=i的赋值语句,无法理解。