题目:挖掘机学校分别派出几人来,展示各家实力。
样例:
6
3 65
2 80
1 100
2 70
3 40
3 0
注:第一行是共派出的参赛人数N(不超过10^5),下面是各个参赛者的成绩。
标准解:
#include <stdio.h>
const int maxn = 10010;
int school[maxn] = {0}; //记录每个学校的总分
int main()
{
int n,schID,score;'
scanf("%d", &n);
for(int i=1; i<n; i++)
{
scanf("%d%d", &schID, &score); //学校ID,分数
school[schID] += score; //学校schID的总分增加score
}
int k=1, MAX=-1; //最高总分的学校ID以及其总分
for(int t=1; t<n; t++ ) //从所有学校中选出总分最高的一个
{
if(school[i]>MAX)
{
MAX = school[t];
k = t;
}
}
printf("%d%d\n", k, MAX);
return 0;
}
注意一:在比较最大值部分,有一定的浪费,因为在:
for(int t=1; t<n; t++ ) //从所有学校中选出总分最高的一个
{
if(school[t]>MAX)
{
MAX = school[t];
k = t;
}
}
其中的t值是小于或者等于n的,n为参赛人数,而t则为学校的ID,当t远小于ID时会有一定浪费。当然这只是我的理解。因为毕竟如果出现n个学校,同时n个学生分别出自不同的学校也明了了。注意二:t在VC++6.0中不能为i,编译器会报错:定义混乱