参考了 http://blog.csdn.net/qq_34594236/article/details/51702557 的代码
(好吧其实基本一模一样捂脸哭)
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
输入格式:
输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
输出格式:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例:
2 150
#include<iostream>
using namespace std;
int main(){
int arr[100001] = {0};
int max = 0;
int n = 0;
int num,score;
cin >> n;
for(int i = 0;i<n;i++){
cin>>num;
cin>>score;
//这一句就是来自相同学校的分数相加
arr[num] = arr[num] + score;
if(arr[num]>arr[max]){
max = num;
}
}
cout<<max<<" "<<arr[max];
return 0;
}
刚开始看题的时候,看到这种输入瞬间想到用结构体数组来做,然后做着做着就被自己困死在结构体里面了(果真刚学会用结构体数组太激动么,丢人= =)。
我开始思路是先全部输入,然后再让每个学校编号相同的分数相加,后面编号和前面编号相同的置为0,加一个判断,如果编号为0证明被加过了。然后在根据得分高低输出学校编号和成绩。我是在前面这步被卡住的,加完之后,没有办法再排成绩高低了= =而且这么做太麻烦了
然后找了别人的做法。
果真能一边输入一边处理的方法才是好方法啧啧啧……
这样用输入的学校编号做数组下标的方法好像不是第一次见了。
还有这个判断的方法,完全不用整个排序找大小,一边加一边比就好了,最后的肯定是最大的。
很好用,五分好评……(捂脸)