Note
- 排序
- 某个学生没有任何的提交记录,所以读入数据中没有这个学号的值。
排序时在compare函数中找不到a.id (error)!需要先对id进行初始化!
Code:
#include<bits/stdc++.h>
using namespace std;
struct submission{
int id,total,best,rank,submit;
int score[6]={-2,-2,-2,-2,-2,-2};
bool flag[6],subs[6];
submission(){
best=total=submit=0;
memset(flag,false,sizeof(flag));
memset(subs,false,sizeof(subs));
}
};
bool compare(submission a,submission b){
if(a.total!=b.total) return a.total>=b.total;
else if(a.best!=b.best) return a.best>=b.best;
else return a.id<b.id;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
int n,k,m;
int sid,pid,score;
cin>>n>>k>>m;
submission s[n+1];
int pscore[k+1];
for(int i=1;i<=k;i++)
cin>>pscore[i];
for(int i=0;i<=n;i++)
s[i].id=i;
while(m--){
cin>>sid>>pid>>score;
s[sid].id=sid;
if(s[sid].score[pid]<score)
s[sid].score[pid]=score;
if(s[sid].score[pid]==pscore[pid]&&s[sid].flag[pid]==false){
s[sid].best++;
s[sid].flag[pid]=true;
}
if(s[sid].score[pid]>=0&&s[sid].subs[pid]==false){
s[sid].submit++;
s[sid].subs[pid]=true;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){
if(s[i].score[j]<=-1);
else s[i].total+=s[i].score[j];
}
}
sort(s+1,s+n+1,compare);
s[1].rank=1;
for(int i=1;i<=n;i++){
if(s[i].submit>0){
if(i>1&&s[i].total==s[i-1].total)
s[i].rank=s[i-1].rank;
else
s[i].rank=i;
printf("%d %05d %d",s[i].rank,s[i].id,s[i].total);
for(int j=1;j<=k;j++){
if(s[i].score[j]<=pscore[j]&&s[i].score[j]>=0) printf(" %d",s[i].score[j]);
else if(s[i].score[j]==-1) printf(" 0");
else printf(" -");
}
printf("\n");
}
}
return 0;
}