写的时候最后一个测试点一直没过去,后来在网上冲浪了一会才发现竟然有个极其sb的坑点- -
坑点:如果你的ID用long long存放,那么需要在输出时补前导0凑齐13位!!下次再也不用long long存ID了:)
```cpp
#include <bits/stdc++.h>
using namespace std;
struct Stu
{
long long ID;
int score;
int local_number;
int local_rank;
int global_rank;
};
Stu testee[110][310];
Stu test[30010];
int num[110];
bool cmp(Stu a,Stu b)
{
if(a.score!=b.score) return a.score>b.score;
else return a.ID<b.ID;
}
int main(void)
{
int N,cnt=0,sum=0;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d",&num[i]);
for(int j=0;j<num[i];j++)
{
scanf("%lld%d",&testee[i][j].ID,&testee[i][j].score);
testee[i][j].local_number=i+1;
}
sort(testee[i],testee[i]+num[i],cmp);
testee[i][0].local_rank=1;
for(int j=1;j<num[i];j++)
{
if(testee[i][j].score == testee[i][j-1].score) testee[i][j].local_rank = testee[i][j-1].local_rank;
else testee[i][j].local_rank = j+1;
}
}
for(int i=0;i<N;i++)
{
for(int j=0;j<num[i];j++)
{
test[cnt]=testee[i][j];
cnt++;
}
}
sort(test,test+cnt,cmp);
for(int i=0;i<N;i++)
sum+=num[i];
printf("%d\n",sum);
test[0].global_rank=1;
printf("%013lld %d %d %d\n",test[0].ID,test[0].global_rank,test[0].local_number,test[0].local_rank);
for(int i=1;i<cnt;i++)
{
if(test[i].score == test[i-1].score) test[i].global_rank = test[i-1].global_rank;
else test[i].global_rank = i+1;
printf("%013lld %d %d %d\n",test[i].ID,test[i].global_rank,test[i].local_number,test[i].local_rank);
}
}