1. 程式人生 > >演算法筆記(二)挖掘機技術哪家強

演算法筆記(二)挖掘機技術哪家強

題目:挖掘機學校分別派出幾人來,展示各家實力。

樣例:

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,編譯器會報錯:定義混亂