有点忙,晚点整理吧
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct Testee
{
char id[15];
int grade;
int location_number;
int local_rank;
}testee[300010];
bool cmp(Testee a,Testee b)
{
if(a.grade!=b.grade) return a.grade>b.grade;
else return strcmp(a.id,b.id)<0;
}
int main()
{
int N,index=0;
scanf("%d",&N);
for(int i =0;i<N;i++)
{
int K;
scanf("%d",&K);
for(int h =0;h<K;h++)
{
scanf("%s%d",testee[index].id,&testee[index].grade);
testee[index].location_number = i+1;
index++;
}
sort(testee+index-K,testee+index,cmp);
testee[index-K].local_rank = 1;
for(int j =1;j<K;j++)
{
if(testee[index-K+j].grade==testee[index-K+j-1].grade)
testee[index-K+j].local_rank = testee[index-K+j-1].local_rank;
else
testee[index-K+j].local_rank = j+1;
}
}
sort(testee,testee+index,cmp);
int tmp = 1;
printf("%d\n",index);
for(int i =0;i<index;i++)
{
if(i>0&&testee[i].grade !=testee[i-1].grade)
tmp = i+1;
printf("%s %d %d %d\n",testee[i].id,tmp,testee[i].location_number,testee[i].local_rank);
}
return 0;
}