#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int N,K,M;
int mp[10];//每题的分值
struct node
{
int id;
int score[10];
int perfect;
int sum;
int rankk;
}T[10005];
void init()
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=K;j++)
{
T[i].score[j] = -2;//-2表示没有提交过,-1表示提交过编译失败的代码,0表示提交过编译成功但是没得分的代码
}
T[i].perfect=0;
T[i].sum=0;
T[i].id=i;
}
}
bool cmp(node a,node b)
{
if(a.sum!=b.sum)
return a.sum > b.sum;
else if(a.perfect!=b.perfect)
return a.perfect > b.perfect;
else
return a.id < b.id;
}
bool fun(node a)//判断a是不是满足:所有题目都是-2或-1?若是,他就可以被忽略了
{
int flag=0;
for(int i=1;i<=K;i++)
{
if(a.score[i]>=0)
flag++;
}
if(flag!=0)
return false;
else
return true;
}
void pr(int t)
{
if(t==-2)
printf(" -");
else if(t==-1)
printf(" 0");
else
printf(" %d",t);
}
int main()
{
// freopen("in.txt","r",stdin);
scanf("%d %d %d",&N,&K,&M);
init();//初始化
for(int i=1;i<=K;i++)
scanf("%d",&mp[i]);
for(int i=0;i<M;i++)//给每个人的每题得分赋值
{
int tid,tnum,tscore;
scanf("%d %d %d",&tid,&tnum,&tscore);
if(tscore > T[tid].score[tnum])
T[tid].score[tnum]=tscore;
}
for(int i=1;i<=N;i++)
{
for(int j=1;j<=K;j++)
{
if(T[i].score[j]>0)
T[i].sum+=T[i].score[j];
}
for(int j=1;j<=K;j++)
{
if(T[i].score[j]==mp[j])
T[i].perfect++;
}
}
sort(T+1,T+1+N,cmp);
T[1].rankk=1;
for(int i=2;i<=N;i++)//给排名赋值
if(T[i].sum==T[i-1].sum)
T[i].rankk=T[i-1].rankk;
else
T[i].rankk=i;
for(int i=1;i<=N;i++)
{
if(fun(T[i])==true)
continue;
printf("%d %05d %d",T[i].rankk,T[i].id,T[i].sum);
for(int j=1;j<=K;j++)
pr(T[i].score[j]);//控制输出格式
printf("\n");
}
return 0;
}
1075. PAT Judge (25)
最新推荐文章于 2020-04-27 09:33:30 发布