PAT-B1032题解

-简单模拟

【1032】 挖掘机技术哪家强(20)
【时间限制】
200 ms
【内存限制】
65536 kB
【代码长度限制】
8000 B
【判题程序】
Standard
【作者】
CHEN, Yue
【题目描述】
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
【输入格式】:
输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
【输出格式】:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。

【输入样例】:
6
3 65
2 80
1 100
2 70
3 40
3 0
【输出样例】:
2 150

题目解析:开大数组记录每个学校的总分,对每个读入的数据进行数组的同步。再寻找数组中最大的值及对应的编号。
思路:
①令数组school[maxn]记录每个学校的总分,初值为0,。对每一个读入的学校schID与其对应的分数score,令school[schID]+score.
②令变量k记录最高总分的学校编号,变量MAX记录最高总分,初值-1.由于学校是连续编号的,因此枚举编号1~N,不断跟新k和MAX即可

AC代码(C++):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
using namespace std;
int main(){
int sum[100001]={0};//存储学校总成绩数组
int i; //学校编号
int j;
int a; //参赛成绩
int Max=1; //学校的最大编号
int MaxSum=0; //最大学校总成绩
int N; //参赛人数
cin>>N;
while(N--){
cin>>i;
cin>>a;
sum[i]+=a;
if(i>Max)
Max=i;
}
for(j=1;j<=Max;j++){
if(sum[j]>MaxSum){
MaxSum=sum[j]; //记录最大总成绩
i=j; //记录总成绩最大的学校编号
}
}
cout<<i<<" "<<MaxSum;
return 0;
}

注意:开数组时一定要置零,一开始沒置零只能过17个,置零才能完全过20.

Thanks for your reward!