题目描述
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
输入描述:
输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号、及其比赛成绩(百分制),中间以空格分隔。
输出描述:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入例子:
6
3 65
2 80
1 100
2 70
3 40
3 0
输出例子:
2 150
代码
原码
#include<stdio.h>
int main()
{
int number,college,score;
static int i,a[100000],*p=a,c=100000; //p指向最大值
scanf("%d",&number);
for(;i<number;i++)
{
scanf("%d",&college);
scanf("%d",&score);
a[college-1]+=score;
}
while(c--)
{
if(a[c]>*p)
p=a+c;
}
printf("%d %d",p-a+1,*p);}
修改1
#include<stdio.h>
int main()
{
int number,college,score;
static int i,a[100000],*p=a;
scanf("%d",&number);
for(;i<number;i++)
{
scanf("%d",&college);
scanf("%d",&score);
a[college-1]+=score;
if(a[college-1]>*p)
p=a+college-1;
}
printf("%d %d",p-a+1,*p);
}
改进:
原版通过遍历找到最大值
修改后随时记录当前最大值
效果:应当减少比较、但效果反而增加运行时间
修改2
scanf("%d",&college);
scanf("%d",&score);
C=college-1;
a[c]+=score;
if(a[c]>*p)
p=a+c;
改进:
猜测可能为 修改版1重复计算了college-1
效果:运行时间减少。但仍不如原版,无果。