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

题目描述

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

 

输入描述:

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


 

输出描述:

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

 

输入例子:

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 

 

你可能感兴趣的:(PAT)