浙大PAT 1012题 1012. The Best Rank

来源:互联网 发布:js获取上下文 编辑:程序博客网 时间:2024/05/20 05:26

时间复杂度O(n^2),当n=2000时,复杂度为400 0000,本以为过不了。
但别人写的代码蛮简单的,400ms的时限,100ms能过。

#include <stdio.h>#include <string.h>#define MAX_NUM 0x7ffffffftypedef struct Node{    char ID[10];    int score[4];    int best_rank;    int best_course;}Stu;Stu stu[2005];int N,M;char map[]={'C','M','E','A'};int main(){ int i,j,k;    scanf("%d %d",&N,&M);    for(i=0;i<N;i++){        scanf("%s %d %d %d",&stu[i].ID,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);        stu[i].score[3]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;    }    for(i=0;i<N;i++){  int rank[4]={1,1,1,1};        for(j=0;j<N;j++){            for(k=0;k<4;k++){                if(i!=j&&stu[j].score[k]>stu[i].score[k])                    rank[k]++;            }       }       int best_rank=MAX_NUM;       int best_course=MAX_NUM;       for(j=0;j<4;j++){           if(rank[j]<best_rank){                best_rank=rank[j];                best_course=j;           }           else if(rank[j]==best_rank){                if(j==3||j<best_course){                     best_course=j;                }           }       }       stu[i].best_rank=best_rank;       stu[i].best_course=best_course;    }    for(i=0;i<M;i++){       char search[10];       scanf("%s",&search);       for(j=0;j<N;j++){            if(strcmp(stu[j].ID,search)==0){                printf("%d %c\n",stu[j].best_rank,map[stu[j].best_course]);                break;            }       }       if(j==N)     printf("N/A\n");       } return 0; } 

 

原创粉丝点击