#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <ctype.h>
using namespace std;
typedef struct
{
int id;
int score[6];//最多5门
int total;
int flag;//是否通过编译或者提交过答案
int pft;
}Node;
int compare(Node a,Node b)
{
if(a.flag!=b.flag)return a.flag>b.flag;
else if(a.total!=b.total)return a.total>b.total;
else if(a.pft!=b.pft)return a.pft>b.pft;
else return a.id<b.id;
}
int main()
{
// freopen("input.txt","r",stdin);
int n,k,m;
int i;
int id,pb,score;
scanf("%d%d%d",&n,&k,&m);//
int full[k+1];
Node user[n+1];
for(i=1;i<=n;i++)
{
user[i].id=i;
user[i].flag=0;
user[i].total=0;//初始化
user[i].pft=0;//完美解答数目为0
fill(user[i].score,user[i].score+6,-1);
}//初始化所有数组
for(i=1;i<=k;i++)
{
scanf("%d",full+i);//得到满分成绩
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&id,&pb,&score);
if(user[id].score[pb]==-1&&score==-1)
{
user[id].score[pb]=0;//只要提交过就更新为0
}
else if(user[id].score[pb]<score)
{
user[id].score[pb]=score;//更新数组
user[id].flag=1;//表示更新过可以参与排名和显示
if(score==full[pb])user[id].pft++;//完美解答数加1
}
}
for(i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
if(user[i].score[j]!=-1)user[i].total+=user[i].score[j];
}
}
sort(user+1,user+n+1,compare);
int level=1,count=1;
for(i=1;i<=n;i++)
{
if(user[i].flag==0)break;
printf("%d ",level);//得到level;
printf("%05d %d ",user[i].id,user[i].total);
for(int j=1;j<=k;j++)
{
if(user[i].score[j]!=-1)
{
printf("%d",user[i].score[j]);//
}
else printf("-");
if(j<k)printf(" ");
}
printf("\n");
if(i<n&&user[i].total==user[i+1].total)
{
count++;
}
else{
level+=count;
count=1;
}
}
}
PAT A1075 PAT Judge
最新推荐文章于 2024-05-28 16:26:45 发布