PAT 乙级 1032.挖掘机技术哪家强 C++/Java

题目来源

为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。

输入格式:

输入在第 1 行给出不超过 1 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。

输出格式:

在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。

输入样例:

6
3 65
2 80
1 100
2 70
3 40
3 0

输出样例:

2 150

分析:

学校编号最大不超过$10^5$,开辟一个大型数组来保存学校分数就可以了,数组下标作为学校编号

这道题用Java会超时,最后一个测试点C++都用了70ms

C++实现:

 1 #include <iostream>
 2 using namespace std;
 3 const int  maxn = 100010;
 4 int school[maxn] = { 0 };    //记录每个学校的总分
 5 int main()
 6 {
 7     int N;
 8     int school_num;        //学校编号
 9     int school_score;    //学校分数
10     int max_num = 0, max_score = 0;
11     cin >> N;
12     for (int i = 0; i < N; ++i)
13     {
14         cin >> school_num >> school_score;
15         school[school_num] += school_score;
16         if(school[school_num] > max_score)
17         {
18             max_num = school_num;
19             max_score = school[school_num];
20         }
21     }
22     cout << max_num << " " << max_score;
23     return 0;
24 }

 

Java实现:

 最后一个测试点容易超时

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.util.Scanner;
 5 
 6 public class Main {
 7     public static void main(String[] args) throws IOException {
 8         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 9         int n = Integer.parseInt(in.readLine());
10 
11         int[][] num = new int[n][2];
12         int[] sum = new int[n];
13         for (int i = 0; i < n; i++) {
14             String[] s = in.readLine().split("\\s+");
15             num[i][0] = Integer.parseInt(s[0]);
16             num[i][1] = Integer.parseInt(s[1]);
17             sum[i] = num[i][1];
18         }
19         for (int i = 0; i < n; i++) {
20             for (int j = i + 1; j < n; j++) {
21                 if (num[i][0] == num[j][0]) {
22                     sum[i] += num[j][1];
23                 }
24             }
25         }
26         int max = 0;
27         int flag = 0;
28         int len = sum.length;
29         for (int i = 0; i < len ; i++) {
30             if (sum[i] > max) {
31                 max = sum[i];
32                 flag = i;
33             }
34         }
35         System.out.print(num[flag][0] + " " + max);
36     }
37 }

 

posted @ 2019-10-22 17:52  47的菠萝~  阅读(181)  评论(0编辑  收藏  举报