分析:
1.定义最大可能的数组(根据题目给出的数据范围)
2.下标代表学校编号,对应数组的位置存储该学校所得的分数
以下是在平台运行通过的代码:
#include <stdio.h>
#include <algorithm>
using namespace std;
int count_number;
int school_number;
int school_grade[1000001] = { 0 };//全部初始化为0
int main()
{
scanf("%d",&count_number);
int i = 0;
int grade;
while(count_number)
{
scanf("%d",&school_number);
scanf("%d",&grade);
school_grade[school_number]+=grade;
i++;
count_number--;
}
int sort_school_grade[i+1];
for(int j=0;j<=i;j++)
{
sort_school_grade[j]=school_grade[j];
}
sort(sort_school_grade,sort_school_grade + i+1);
for(int j=0;j<=i;j++)
{
if(school_grade[j]==sort_school_grade[i])
{
printf("%d %d",j,sort_school_grade[i]);
}
}
return 0;
}
此题需要注意:
1.读题仔细,我最开始读题不仔细,简单理解最后输出单人最高成绩了,最后代码写完了才发现题是让输出得分最高的学校编号,所以输入和输出样例需要仔细看,以防浪费时间。
2.题目给的范围需要仔细,题目中为不超过10^5,而我起始数组的起始下标0其实没有用,所以数组大小应该100001,不是100000,每个人的定义不一样,这里只是想说我的问题。