代码实现

#include <stdio.h>
#define MAX 100001
int main(){
    int n,score,sclID,k;
    int i=0,max=0; 
    int scl[MAX]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d" "%d",&sclID,&score);
        scl[sclID]+=score;

        if(scl[sclID]>max){
            max=scl[sclID];
            k=sclID;
        }
    }
    printf("%d %d\n",k,max);
    return 0;     
}

错误记录

#include <stdio.h>
#define MAX 100000                      //第一处
int main(){
    int n,score,sclID,k;
    int i,max=0; 
    int scl[MAX]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d" "%d",&sclID &score); //第二处
        scl[sclID]+=score;

        if(scl[sclID]>max){
            max=scl[sclID];
            k=i;
        }
    }
    printf("d" "d",&k,&max);
    return 0; 

//【第一次】 在PAT用gcc 6.5.0测试时,测试点3显示答案错误,应该是边界测试没过,但是用g++可以通过
//【第二处】 [Error] invalid operands to binary & (have 'int *' and 'int') 【没有加逗号】

尝试优化

#include <stdio.h>
#include <stdlib.h>
    typedef struct {
        int score;
        int flag;
        }Scl;
int main() {

    int n, sclID, maxID, max = 0, score;    //定义数据个数,学校代码,最大分数代码,初始化最大值
    Scl* S; //【第一处】
    scanf("%d", &n);
    S = (Scl*)malloc(n * sizeof(Scl));  //动态分配数组

    int i = 0;
    for (i; i < n; i++) {
        scanf("%d" "%d", &sclID, &score);
        if (S[sclID].flag == 1){
        }
        else {
                S[sclID].score = 0;
                S[sclID].flag = 1;
        }

        S[sclID].score += score;

        if (S[sclID].score > max) {
            max = S[sclID].score;
            maxID = sclID;
        }
    }
    free(S);
    printf("%d %d\n", maxID, max);
    return 0;
}

优化失败

想通过动态分配减少内存使用,但是最后运行提示数组越界,因为动态分配的是连续的空间,而使用时输入数据不是连续的,从而导致错误。后面想用链表来做,但是感觉做出来过于复杂就放弃了。
C99 标准的c++可以定义变长数组...

scanf("%d",&n);
int a[n]= {0};

//【第一处】曾在动态分分配这样写

Scl.data = (Scl*)malloc(n * sizeof(Scl)); 

提示错误[Error] expected identifier or '(' before '.' token
改了很久,最后发现是将结构体类标识符误当做一个变量来使用。