PAT B1032-挖掘机技术哪家强

题目描述

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

输入描述:

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

输出描述:

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

输入样例:

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

输出样例:

2 150

刚拿到这一题的时候,第一种想法是采用一个二维数组,一维存放学校编号,一维存放学校的分数,然后用for循环,来找到相同编号的学校,并将他们的分数相加,最后输出总分最高的xue'x以及它的得分,但是我并没有这么实现,觉得很繁琐,我的实现思路参考算法笔记上的思路,中间有一点细节处不一样(算法笔记上的代码可以通过上面的样例,但是对于极端的样例,如输入中含有100000 100,这样的学校编号很大的便不能通过测试)

具体的实现思路就是,设置了一个一维数组,school[100010]={0},这里将数组的大小设置为100010因为题目中要求学校编号不超过10^5,为了以防万一,这个大小定位100010,然后将学校的编号schID作为索引来存放分数和,即school[schID]+=score,这样输入结束,数组中对应学校编号的位置存放的就是这个学校了总得分,而索引位置就是学校的编号

具体代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int maxn = 100010;
int main()
{
    int i,n,schID,score;
    int school[maxn]={0};
    int ma=0;//记录最大学校编号的位置
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&schID,&score);
        school[schID]+=score;
        if(schID>ma)
            ma=schID;
    }
    int MAX=-1;
    int temp;
    for(i=1;i<=ma;i++)
        if(school[i]>MAX)
        {
            MAX=school[i];
            temp=i;
        }
    printf("%d %d",temp,MAX);
	return 0;
}

在我的代码中多加了记录学校编号的最大值,这样保证可以访问到所有数据,才得以通过所有的测试点。

猜你喜欢

转载自blog.csdn.net/Zizizi9898/article/details/88726714