#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
#define N 10005
using namespace std;
int sc[6],mp[100005];
struct node
{
int total,name,perf,f;
int c[7];
node()
{
for(int i = 0;i<7;i++)c[i] = -2;
}
}p[N];
const bool cmp(const node &x,const node &y)
{
if(x.f == y.f)
{
if(x.total == y.total)
{
if(x.perf == y.perf)return x.name<y.name;
return x.perf>y.perf;
}
return x.total>y.total;
}
return x.f>y.f;
}
int main()
{
int n,m,k,i,j,x,y,z,rk;
while(scanf("%d%d%d",&n,&k,&m)!=EOF)
{
int cnt = 0;
memset(mp,0,sizeof(mp));
for(i = 1;i<=k;i++)scanf("%d",&sc[i]);
for(i = 1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(!mp[x])mp[x] = ++cnt;
p[mp[x]].c[y] = max(p[mp[x]].c[y],z);
p[mp[x]].name = x;
}
for(i = 1;i<=cnt;i++)
{
int f = 0;
for(j = 1;j<=k;j++)
{
if(p[i].c[j]>=0)
{
f = 1;
if(p[i].c[j] == sc[j])p[i].perf++;
p[i].total+=p[i].c[j];
}
}
p[i].f = f;
}
sort(p+1,p+cnt+1,cmp);
for(i = 1;i<=cnt;i++)
{
if(!p[i].f)break;
if(i == 1||p[i].total<p[i-1].total)rk = i;
printf("%d %05d %d ",rk,p[i].name,p[i].total);
for(j = 1;j<=k;j++)
{
if(p[i].c[j] == -2)printf("-");
else printf("%d",max(p[i].c[j],0));
if(j!=k)printf(" ");
}
printf("\n");
}
}
return 0;
}
pat1075 PAT Judge
最新推荐文章于 2021-02-02 17:49:37 发布