为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
输入格式:
输入在第 1 行给出不超过 10
5
的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
输出格式:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例:
2 150
解题思路
题目上说了第一行输入不超过105,所以我们假定就有105个学校。用一个数组存储它的成绩即可,但是不幸的是最后一个还是超时了。
Java版本如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int m = Integer.parseInt(br.readLine()); //总参赛人数
int[] cansai = new int[10000]; //记录成绩
for (int i = 0; i < m; i++) {
String[] xuanshou = br.readLine().split("\\s+");
int school = Integer.parseInt(xuanshou[0]);
int gread = Integer.parseInt(xuanshou[1]);
cansai[school] += gread; //将参赛选手成绩加入其学校成绩
}
br.close();
int maxschool = 0; //最大成绩学校编号
int maxgread = 0; //最大成绩
for (int j = 0; j < 10000; j++) {
if (cansai[j] > maxgread) {
maxgread = cansai[j];
maxschool = j;
}
}
System.out.println(maxschool + " " + maxgread);
}
}
2020.6.14再次刷题,C++更新,不超时,代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, id, temp, max = 0;
cin >> n;
int m[100005] = {0};
for(int i = 0; i < n; i++){
cin >> id >> temp;
m[id] += temp;
if(m[id] > m[max]){
max = id;
}
}
cout << max << " " << m[max];
return 0;
}