【PAT甲级】1075 PAT Judge (25 分)

题意:

输入三个正整数N,K,M(N<=10000,K<=5,M<=100000),接着输入一行K个正整数表示该题满分,接着输入M行数据,每行包括学生的ID(五位整数1~N),题号和该题得分(-1表示没通过编译)。输出排名,学生ID,总分和每一题的得分,第一优先为总分降序,第二优先为题目AC数降序,第三优先为学生ID升序(提交但未通过编译得分为0,未提交得分为-,不输出没有提交或者提交全都未通过编译的学生信息)。

trick:

测试点4为有学生先交了得到分的程序后该题后来又交了未通过编译的程序,注意分支结构不要出错。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 typedef struct student{
 5     int id;
 6     int score[7];
 7     int sum;
 8     int num;
 9 };
10 student a[10007],b[10007];
11 int total[7];
12 bool cmp(student x,student y){
13     if(x.sum!=y.sum)
14         return x.sum>y.sum;
15     if(x.num!=y.num)
16         return x.num>y.num;
17     return x.id<y.id;
18 }
19 int main(){
20     int n,k,m;
21     scanf("%d%d%d",&n,&k,&m);
22     for(int i=1;i<=n;++i)
23         for(int j=1;j<=k;++j)
24             a[i].score[j]=-1;
25     for(int i=1;i<=k;++i)
26         scanf("%d",&total[i]);
27     for(int i=1;i<=m;++i){
28         int id,num,val;
29         scanf("%d%d%d",&id,&num,&val);
30         if(val>-1)
31             a[id].id=id;
32         else if(a[id].score[num]<0)
33             a[id].score[num]=0;
34         if(val>a[id].score[num])
35             a[id].score[num]=val;
36     }
37     int cnt=0;
38     for(int i=1;i<=n;++i)
39         if(a[i].id){
40             b[++cnt]=a[i];
41             for(int j=1;j<=k;++j){
42                 b[cnt].sum+=max(0,b[cnt].score[j]);
43                 if(b[cnt].score[j]==total[j])
44                     ++b[cnt].num;
45             }
46         }
47     sort(b+1,b+1+cnt,cmp);
48     int rank_=0;
49     b[0].sum=1e9;
50     for(int i=1;i<=cnt;++i){
51         if(b[i].sum<b[i-1].sum)
52             rank_=i;
53         printf("%d %05d %d",rank_,b[i].id,b[i].sum);
54         for(int j=1;j<=k;++j)
55             if(b[i].score[j]==-1)
56                 printf(" -");
57             else
58                 printf(" %d",b[i].score[j]);
59         printf("\n");
60     }
61     return 0;
62 }

 

 

 

posted @ 2019-11-07 11:48  sewage  阅读(167)  评论(0编辑  收藏  举报