#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
struct student{
char name[15];
int s,kc,r,local;
}stu[30010];//定义所有学生结构体!一定要注意这里的取值!
//题目规定不超过100个考场!每个考场不超过300个人! 即该值不小于100×300=30000人!!
bool cmp(student a,student b){
if(a.s!=b.s) return a.s>b.s;
else return strcmp(a.name,b.name)<0;
}//定义比较函数
int main(){
int i,j,k=0,n,a,b=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
b+=a;
for(j=0;j<a;j++){
++k;
scanf("%s %d",&stu[k].name,&stu[k].s);
stu[k].kc=i;//记录考场!
}
}//分考场输入所有学生分数,并且记录考场!
printf("%d\n",b);
sort(stu+1,stu+k+1,cmp);//全局排序!!
/*for(i=1;i<=k;i++){
printf("%s %d %d %d\n",stu[i].name,stu[i].r,stu[i].kc,stu[i].local);
}//(用来测试!)全局输出!!! */
for(i=1;i<=k;i++){
if(i!=1&&stu[i].s==stu[i-1].s) stu[i].r=stu[i-1].r;
else stu[i].r=i;
}//全局排名!!!!!!
int now=0,bef=0;
for(i=0;i<n;i++){//n个教室
for(j=1;j<=k;j++){
if(stu[j].kc==i+1){//是该考场则记录!
now++;
if(j!=1&&stu[j].s==stu[bef].s)
stu[j].local=stu[bef].local;
else stu[j].local=now;
bef=j;
}
}
now=0;
}//分教室排名!!!!!
for(i=1;i<=k;i++){
printf("%s %d %d %d\n",stu[i].name,stu[i].r,stu[i].kc,stu[i].local);
}//全局输出!!!
return 0;
}
A1025 pat ranking
最新推荐文章于 2024-09-15 22:16:28 发布