1032. 挖掘机技术哪家强

来源:互联网 发布:淘宝捉猫猫时装碎片 编辑:程序博客网 时间:2024/04/26 04:27

一、题目

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

输入格式:

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

输出格式:

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

输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例:
2 150

二、个人理解

此题考察排序。但是此题乍看上去好像是用结构体排序,但是深思起来,这样肯定会运行超时。所以此时应该采用更灵活的方式,如采用数组索引保存编号。


关键点:

  • 输入的同时,同时将编号与分数一一映射,并进行累加。
  • 求最高分编号时,应该另外有个副本以便保存映射关系。

C++:

#include <iostream>#include <stdlib.h>using namespace std;int cmp(const void *a, const void *b){    return *(int *)a - *(int *)b;}int main(){    int n;    cin >> n;    int i, j;    int sum[n];    for (i = 0; i < n; i++) {        sum[i] = 0;    }    //巧用数组,将编号作为索引    for (i = 0; i < n; i++) {        int num, result;        cin >> num >> result;        sum[num - 1] += result;    }    //副本,以便求最高分学校编号    int temp[n];    for (i = 0; i < n; i++) {        temp[i] = sum[i];    }    qsort(sum, n, sizeof(int), cmp);    for (i = 0; i < n; i++) {        if (temp[i] == sum[n - 1]) {            cout << i + 1 << " ";        }    }    cout << sum[n - 1];}