演算法筆記(二)挖掘機技術哪家強
題目:挖掘機學校分別派出幾人來,展示各家實力。
樣例:
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,編譯器會報錯:定義混亂