#include<iostream>
#include<algorithm>
using namespace std;
struct student{
int id;
int score[6]={0,-2,-2,-2,-2,-2};
int num_of_perfect=0;
int show=0;
int rnk;
};
//-2表示没有提交过
//-1表示提交过,没有编译
//0以及以上,过了编译
int N,K,M;//N用户数,K题目数,M提交次数
int total[6];
student s[100000];
bool comp(student x,student y){
if(x.score[0]!=y.score[0])return x.score[0]>y.score[0];
if(x.num_of_perfect!=y.num_of_perfect)return x.num_of_perfect>y.num_of_perfect;
if(x.show!=y.show)return x.show>y.show;
return x.id<y.id;
}
int main()
{
int i,j,k;
cin>>N>>K>>M;
for(i=1;i<=K;i++)cin>>total[i];
while(M--){
cin>>i>>j>>k;
if(k>=0)s[i].show=1;
if(k>s[i].score[j])s[i].score[j]=k;
}
for(i=1;i<=N;i++){
s[i].id=i;
for(j=1;j<=K;j++){
if(s[i].score[j]>=0)s[i].score[0]+=s[i].score[j];
if(s[i].score[j]==total[j])s[i].num_of_perfect++;
}
}
sort(s+1,s+N+1,comp);
for(i=1;i<=N;i++){
if(i==1||s[i].score[0]!=s[i-1].score[0]){
s[i].rnk=i;
}
else{
s[i].rnk=s[i-1].rnk;
}
}
for(i=1;i<=N;i++){
if(s[i].show==0)break;
printf("%d %05d %d",s[i].rnk,s[i].id,s[i].score[0]);
for(j=1;j<=K;j++){
if(s[i].score[j]==-2)cout<<" -";
else if(s[i].score[j]==-1)cout<<" 0";
else cout<<' '<<s[i].score[j];
}
cout<<endl;
}
}
// 1 2 3 4 5 6 7 8 9
// 10 95 95 90 85 85 85 85 80
// 1 2 3 4 5 6 7 8 9
1075 PAT Judge
最新推荐文章于 2024-07-19 21:09:58 发布