为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
输入格式:
输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
输出格式:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:6 3 65 2 80 1 100 2 70 3 40 3 0输出样例:
2 150
思路分析:排序,不难。
代码如下:
// 挖掘机技术哪家强.cpp : 定义控制台应用程序的入口点。
//
#include <stdio.h>
#include<stdlib.h>
typedef struct {
int schooln;
int gra;
} stu;
typedef struct {
int num=0;
int sum=0;
}school;
int cmp(const void *a, const void *b)
{
school *pa;
school *pb;
pa = (school *)a;
pb = (school *)b;
return pa->sum - pb->sum;
}
int main()
{
//school schoola[100000];
//stu stua[100000];
int n,max=0,i;
stu *stua=NULL;
school *schoola=NULL;
scanf("%d", &n);
stua = (stu *)malloc(sizeof(stu)*n);
for (i = 0; i < n; i++)
{
scanf("%d%d", &stua[i].schooln, &stua[i].gra);
//schoola[stua[i].schooln-1].sum += stua[i].gra;
//schoola[stua[i].schooln-1].num = stua[i].schooln;
if (stua[i].schooln-1>max)
max = stua[i].schooln-1;
}
schoola = (school *)malloc(sizeof(school)*(max + 1));
for (i = 0; i < max+1; i++)
{
schoola[i].sum = 0;
}
for (i = 0; i < n; i++)
{
schoola[stua[i].schooln - 1].sum += stua[i].gra;
schoola[stua[i].schooln - 1].num = stua[i].schooln;
}
qsort(schoola, max + 1, sizeof(school), cmp);
printf("%d %d", schoola[max].num, schoola[max].sum);
free(schoola);
free(stua);
return 0;
}