现在的位置: 首页 > 综合 > 正文

浙大PAT 1012题 1012. The Best Rank

2018年02月06日 ⁄ 综合 ⁄ 共 1392字 ⁄ 字号 评论关闭

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

#include <stdio.h>
#include <string.h>
#define MAX_NUM 0x7fffffff
typedef 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;
 }
 

 

抱歉!评论已关闭.