PAT (Basic Level) Practise (中文)-1032. 挖掘机技术哪家强(20) http://www.patest.cn/contests/pat-b-practise/1032
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
输入格式:
输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
输出格式:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:
6 3 65 2 80 1 100 2 70 3 40 3 0
输出样例:
2 150
题目信息:
1. 输入的第一行给出一个数值,范围(0,100000],代表参赛人数。
2. 参赛者代表学校,学校使用数字编号,且从1开始连续编号。所以学校编号范围为[1,100000]。所以一个100001个int的hash表即可记录所有参赛学校的分数。
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int n=0; 6 scanf("%d",&n); 7 8 int student=0,chengji=0,max=0,maxshool=0,shool[100000]={0}; 9 for(int i=0;i<n;i++) 10 { 11 scanf("%d%d",&student,&chengji); 12 shool[student] += chengji; 13 if(shool[student]>max) 14 { 15 max=shool[student]; 16 maxshool=student; 17 } 18 19 } 20 printf("%d %d",maxshool,max); 21 return 0; 22 } 23
思考:为什么可以使用hash?为什么选择使用hash?hash节省了哪些工作?
扩展:如果学校不使用数字编号,而是使用名称(字符串),则如何统计出分数最高者?
提示:如果100000条记录+学校使用名称,则在统计某一个学校的总得分时,如果选择的方法较暴力,则可能超时哦。
提示的提示:可以先按照名称排序,比如quick sort。