为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
第一种:链表法(有一个测试点超时)
#include<stdio.h>
#include<stdlib.h>
typedef struct Node *PtrToNode;
struct Node{
int bh,fs;
PtrToNode Next;
};
typedef PtrToNode List;
List find(List L,int bh){
List t=L->Next;
while(t&&t->bh!=bh){
t=t->Next;
}
return t;
}
int main(){
int n,bh,fs;
int maxf=-1;
List L,max,h;
scanf("%d",&n);
L=(List)malloc(sizeof(struct Node));
L->Next=NULL;
while(n--){
scanf("%d %d",&bh,&fs);
h=find(L,bh);
if(h==NULL){
List p=(List)malloc(sizeof(struct Node));
p->bh=bh;
p->fs=fs;
p->Next=L->Next;
L->Next=p;
}
else {
h->fs+=fs;
}
}
h=L->Next;
while(h){
if(h->fs>maxf){
max=h;
maxf=h->fs;
}
h=h->Next;
}
printf("%d %d",max->bh,max->fs);
return 0;
}
第二种:结构体法()
#include<stdio.h>
#include<stdlib.h>
struct Node{
int score;
}a[100005];
int main()
{
int n,i,bh,fs,maxbh,maxfs=0;
scanf("%d",&n);
scanf("%d %d",&maxbh,&maxfs);
a[maxbh].score=maxfs;
for(i=1;i<n;i++){
scanf("%d %d",&bh,&fs);
a[bh].score+=fs;
if(a[bh].score>maxfs){
maxbh=bh;
maxfs=a[bh].score;
}
}
printf("%d %d",maxbh,maxfs);
}