本文主要是介绍浙大PAT 1012题 1012. The Best Rank,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
时间复杂度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;
}
这篇关于浙大PAT 1012题 1012. The Best Rank的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!