## 题目描述

``````6
3 65
2 80
1 100
2 70
3 40
3 0
``````

``````2 150
``````
``````#include <stdio.h>
/**
* 对输入的数据进行累加。
* 可以采用散列表。
*      数据在散列表中，进行累加
*      数据不在散列表中，给他赋初始值。
*/
int main(){
// 正整数不超过10^5 开辟数组大小100001 下标从0-100000
const int MAX = 100001;
int school[MAX] = {0};
//一共n组数据  学校id是schoolID，分数是score
int n, schoolID, score;
scanf("%d", &n);
// 把n组数据进行赋值
for (int i = 0; i < n; i++){
scanf("%d %d", &schoolID, &score);
if (school[schoolID] == 0){
school[schoolID] = score;
}
else{
school[schoolID] += score;
}
}
schoolID = 0;
int Max = -1;
// 注意这里是小于等于n 学校编号是从1-10^5
for (int j = 1; j <= n; j++){
if(school[j]>Max){
Max = school[j],schoolID = j;
}
}
printf("%d %d",schoolID,Max);
}

// 之后我发现这样就可以了，因为我数组初始化值都是0
#include <stdio.h>
/**
* 对输入的数据进行累加。
* 可以采用散列表。
*      数据在散列表中，进行累加
*      数据不在散列表中，给他赋初始值。
*/
int main(){
const int MAX = 100001;
int school[MAX] = {0};
int n, schoolID, score;
scanf("%d", &n);

for (int i = 0; i < n; i++){
scanf("%d %d", &schoolID, &score);
school[schoolID] += score;
}

schoolID = 0;
int Max = -1;

for (int j = 1; j <= n; j++){
if(school[j]>Max){
Max = school[j],schoolID = j;
}
}
printf("%d %d",schoolID,Max);
}
``````