PAT (Advanced Level) 1075 PAT Judge
Posted vividbingo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT (Advanced Level) 1075 PAT Judge相关的知识,希望对你有一定的参考价值。
题解
模拟。
题目有三种状态。
第一种为题目得到了一定的分数( >= 0);
第二种为题目提交过但是没有通过编译(代码中状态为 -2 ,输出对应 0 );
第三种题目根本就没提交过(代码中状态为 -1 ,输出对应 ‘-’ )。
考生只要至少有一道题目满足第一种情况,即可将这位考生的信息输出出来。
代码
#include<bits/stdc++.h>
using namespace std;
int N,K,M,score[6];
struct node
{
int name,grade[6],total_solve,sum,rank,isactive;
node()
{
fill(grade,grade+6,-1);
total_solve=sum=isactive=0;
}
void set_grade(int num,int w)
{
if(w==score[num]&&grade[num]!=score[num]) total_solve++;
if(w>=0) isactive=1;
if(w==-1&&grade[num]==-1) grade[num]=-2;
else if(grade[num]<w&&w>=0)
{
if(grade[num]!=-1&&grade[num]!=-2) sum-=grade[num];
sum+=w;
grade[num]=w;
}
}
};
bool cmp(node x,node y)
{
if(x.sum!=y.sum)
return x.sum>y.sum;
else
{
if(x.total_solve!=y.total_solve)
return x.total_solve>y.total_solve;
else
return x.name<y.name;
}
}
vector<node> v;
int main()
{
int j,i,id,cnt=1,same,pre_grade=-1,w,name;
scanf("%d%d%d",&N,&K,&M);
v.resize(N+1);
for(i=1;i<=K;i++) scanf("%d",&score[i]);
for(i=1;i<=M;i++)
{
scanf("%d%d%d",&name,&id,&w);
v[name].name=name;
v[name].set_grade(id,w);
}
sort(v.begin()+1,v.end(),cmp);
for(i=1;i<=N;i++)
{
if(v[i].isactive==0) continue;
if(v[i].sum!=pre_grade)
{
v[i].rank=cnt;
same=cnt;
pre_grade=v[i].sum;
}
else v[i].rank=same;
cnt++;
}
for(i=1;i<=N;i++)
{
if(v[i].isactive==0) continue;
printf("%d %05d %d",v[i].rank,v[i].name,v[i].sum);
for(j=1;j<=K;j++)
{
if(v[i].grade[j]==-1) printf(" -");
else printf(" %d",v[i].grade[j]==-2?0:v[i].grade[j]);
}
printf("
");
}
system("pause");
return 0;
}
以上是关于PAT (Advanced Level) 1075 PAT Judge的主要内容,如果未能解决你的问题,请参考以下文章