PAT乙级——1022挖掘机技术哪家强(20)

题目描述

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


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



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

【PAT乙级——1022挖掘机技术哪家强(20)】
输入例子:
6 3 65 2 80 1 100 2 70 3 40 3 0


输出例子:
2 150

我的思路: 首先定义一个结构体数组contest,里面存放的是学校编号和比赛成绩,并且在输入上述信息的过程中记录学校编号的最大值max_number。再定义一个结构体数据sum_用来存放所有编号number及其对应的成绩总和total。接着使用双层for循环结构,外层为从1到最大编号max_number的遍历,内层为contest中所有有效输入数据个数的遍历。将contest数据中所有number值相同的score值分贝对应地加起来,最后将学校编号number和成绩总和total放入结构体sum_中,用sort降序排列后输出第一项数据的编号number和成绩总和total。
代码:
#include #include using namespace std; struct contest { int number; int score; }; contest contest1[100001]; struct sum_ { int total=0; int number; }sum[100001]; bool compare(sum_ &a,sum_& b) { return a.total > b.total; }int main() { int N,max_number=0; cin >> N; for (int i = 0; i < N; i++) { cin >> contest1[i].number >> contest1[i].score; if (max_number < contest1[i].number)max_number = contest1[i].number; } //cout << max_number; for (int k = 1; k <= max_number; k++) { sum[k - 1].number = k; for (int j = 0; j


    推荐阅读