PAT 甲级 A1012 (2019/02/15)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 struct Stu_info{
 6     int id;           //存放 id 的六位整数
 7     int score[4];     //存放 C M E A 的(分数)数组 
 8 }stu[2010];
 9 char course[4] = {'A', 'C', 'M', 'E'};         //将平均分A存在course[0]中,便于枚举 
10 int Rank[10000000][4] = {0}, now;
11 bool cmp(Stu_info a, Stu_info b){
12     /*    升序排列,如果改为 return a>b; 则为降序    */
13     return a.score[now] > b.score[now];        
14 }  
15 int main(){
16     int m, n;
17     scanf("%d%d", &m, &n);
18     for(int i = 0; i < m; i++){
19         /*    依次读入 id C M E, 且计算品均分 A        */
20         scanf("%d%d%d%d", &stu[i].id, &stu[i].score[1], &stu[i].score[2], &stu[i].score[3]);
21         stu[i].score[0] =  (stu[i].score[1] + stu[i].score[2] + stu[i].score[3]) / 3;
22     }
23     for(now = 0; now < 4; now++){
24         /*    now = 0; 时,对 平均分 A 从大到小排序    
25             now = 1; 时,对   C    C 从大到小排序    
26             now = 2; 时,对  数学  M 从大到小排序    
27             now = 3; 时,对  英语  E 从大到小排序    */
28         sort(stu, stu + m, cmp);
29         /*    排完序号,将分数最高的设置为 1    */ 
30         Rank[stu[0].id][now] = 1;
31         for(int i = 1; i < m; i++){
32             if(stu[i].score[now] == stu[i-1].score[now]){
33                 /*    若与前一位考生分数相同,则他们的排名相同    */ 
34                 Rank[stu[i].id][now] = Rank[stu[i-1].id][now];
35             }else{
36                 /*    否则,为其设置正确的排名    */ 
37                 Rank[stu[i].id][now] = i + 1;
38             }
39         }
40     }
41     int query; //查询的考生 id 
42     for(int i = 0; i < n; i++){
43         scanf("%d", &query);
44         if(Rank[query][0] == 0){/*    如果查询不到,则 N/A    */ 
45             printf("N/A\n");    
46         }else{    /*    否则,输出他们的信息    */ 
47             int k = 0;
48             for(int j = 0; j < 4; j++){
49                 if(Rank[query][j] < Rank[query][k]){
50                     /* j = 0; 查询 Rank[query][0] 的值,最小的即为排名;
51                        以此类推,得到其他同学的各科排名 
52                     */ 
53                     k = j;
54                 }
55             }
56             printf("%d %c\n", Rank[query][k], course[k]);
57         }
58     }    
59     return 0;
60 }

猜你喜欢

转载自www.cnblogs.com/zjsaipplp/p/10415853.html