0%

PAT A1075 PAT Judge

题目链接

解题思路

写一个结构体数组,然后把信息填上,考虑两种特殊情况,没有回答为-2,回答了编译不通过为-1.然后设置一个标记位,编译了不通过和答过题都为1,然后新建一个结构体数组,把所有的满足条件的都放到新数组中,然后对新数组按照要求进行排序,最后输出。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e4+10;
int n,k,m,p[10];
struct User{
int rank,uid,s[10],t_score,flag,pnum;
}user[maxn],ans[maxn];
bool cmp(const User& a,const User&b){
if(a.t_score!=b.t_score) return a.t_score>b.t_score;
else if(a.pnum!=b.pnum) return a.pnum>b.pnum;
else{
return a.uid<=b.uid;
}

}

int main(){
scanf("%d%d%d",&n,&k,&m);
for(int i=0;i<k;i++) scanf("%d",&p[i+1]);
for(int i=0;i<maxn;i++) {//初始化
user[i].flag=-1;
fill(user[i].s+1,user[i].s+k+1,-2);//-2表示没出现过
user[i].pnum=0;
}
int uid,pid,s;
for(int i=0;i<m;i++){
scanf("%d%d%d",&uid,&pid,&s);
//if(s==-1) user[uid].s[pid]=-1;//编译不通过赋值为-1,但是提交过
//两个if并列要考虑清楚,上面赋值为-1了,下面就不可能大于了!!!!
if(s>user[uid].s[pid]) user[uid].s[pid]=s;//每个问题保存最大分数
user[uid].flag=1;//标记为提交的用户
user[uid].uid=uid;
}
int x=0;
for(int i=0;i<maxn;i++){//找出所有可以上ranklist的用户
bool flag=false;
for(int j=1;j<=k;j++){//如果全为-1或-2,不能上ranklist,-2是没回答的,-1是编译不通过的
if(user[i].s[j]!=-1&&user[i].s[j]!=-2) flag=true;
}
if(user[i].flag==1&&flag){//只要不为0,就可以进入分支的!!!
ans[x++]=user[i];
}
}
for(int i=0;i<x;i++){//求已提交用户的总分
int ts=0;
for(int j=1;j<=k;j++){
if(ans[i].s[j]!=-2){//提交过了,如果编译不通过,要把-1变为0
ts+=ans[i].s[j]==-1?0:ans[i].s[j];
if(ans[i].s[j]==p[j]) ans[i].pnum++;//完美解决问题数量
}
}
ans[i].t_score=ts;
}
sort(ans,ans+x,cmp);
ans[0].rank=1;
for(int i=1;i<x;i++){
if(ans[i].t_score==ans[i-1].t_score) ans[i].rank=ans[i-1].rank;
else ans[i].rank=i+1;
}
for(int i=0;i<x;i++){
printf("%d %05d %d",ans[i].rank,ans[i].uid,ans[i].t_score);
for(int j=1;j<=k;j++){
if(ans[i].s[j]==-1) printf(" 0");
else if(ans[i].s[j]!=-2) printf(" %d",ans[i].s[j]);
else if(ans[i].s[j]==-2) printf(" -");
}
printf("\n");
}

return 0;
}

本文标题:PAT A1075 PAT Judge

文章作者:GavinYGM

发布时间:2020年09月07日 - 12:09

最后更新:2020年09月07日 - 12:09

原始链接:http://www.gavinygm.cn/2020/09/07/PAT-A1075-PAT-Judge/

许可协议: 转载请保留原文链接及作者。