样例:
input:
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
output:
9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4
思路:
搞个struct,over
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=11111111;
int maxx=-0x3f3f3f3f;
int n,k,cnt;
int mark[11111][11111];
struct stu
{
char num[111];
int score;
int n1,n2;
int r;
bool operator<(const stu &b)
{
if(score==b.score) return strcmp(num,b.num)<0;
else return score>b.score;
}
}a[maxn];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>k;
for(int j=1;j<=k;j++)
{
cin>>a[j+cnt].num>>a[j+cnt].score;
a[j+cnt].r=i;
}
sort(a+cnt+1,a+cnt+k+1);
for(int j=1;j<=k;j++)
{
if(j!=1&&a[j+cnt].score==a[j+cnt-1].score) a[j+cnt].n1=a[j+cnt-1].n1;
else a[j+cnt].n1=j;
}
cnt+=k;
}
sort(a+1,a+cnt+1);
cout<<cnt<<endl;
for(int i=1;i<=cnt;i++)
{
if(i!=1&&a[i].score==a[i-1].score) a[i].n2=a[i-1].n2;
else a[i].n2=i;
}
for(int i=1;i<=cnt;i++)
{
cout<<a[i].num<<" "<<a[i].n2<<" "<<a[i].r<<" "<<a[i].n1<<endl;
}
return 0;
}