#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <map>
using namespace std;
int N,M,K;
int full[10];
struct student
{
int id;
int score[10];
bool subm[10];
int pnum;
int rank;
int snum;
int total;
student()
{
for(int i=0;i<10;i++)
{
score[i]=-1;
subm[i]=false;
}
}
}stu[100010];
bool cmp(student a,student b)
{
if(a.total!=b.total)return a.total>b.total;
else if(a.pnum!=b.pnum)return a.pnum>b.pnum;
else return a.id<b.id;
}
int main()
{
scanf("%d%d%d",&N,&M,&K);
for(int i=1;i<=M;i++)
{
scanf("%d",&full[i]);
}
for(int i=0;i<K;i++)
{
int id,index,score;
scanf("%d %d %d",&id,&index,&score);
stu[id].id=id;
if(score>=0)
{
if(score>stu[id].score[index])
{
stu[id].score[index]=score;
}
stu[id].snum++;
}
stu[id].subm[index]=true;
}
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
if(stu[i].score[j]!=-1)
{
stu[i].total+=stu[i].score[j];
}
if(stu[i].score[j]==full[j])
{
stu[i].pnum++;
}
}
}
sort(stu+1,stu+N+1,cmp);
stu[1].rank=1;
for(int i=2;i<=N;i++)
{
if(stu[i].total==stu[i-1].total)
{
stu[i].rank=stu[i-1].rank;
}
else
{
stu[i].rank=i;
}
}
for(int i=1;i<=N;i++)
{
if(stu[i].snum>0)
{
printf("%d %05d %d",stu[i].rank,stu[i].id,stu[i].total);
for(int j=1;j<=M;j++)
{
if(stu[i].score[j]!=-1)
{
printf(" %d",stu[i].score[j]);
}
else if(stu[i].subm[j]==true)
{
printf(" 0");
}
else
{
printf(" -");
}
}
printf("\n");
}
}
return 0;
}
PAT甲1075 PAT Judge(25 分)
最新推荐文章于 2020-05-02 13:30:54 发布