简单模拟题
结构体排序
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct total{
string id;
int score;
int t_rank;
int lo_rank;
int flag;
}q[31050];
bool comp(total a,total b)
{
if(a.score==b.score)
return a.id<b.id;
return a.score>b.score;
}
int main()
{
int n,k,sum=0;
cin>>n;
int w=1,p;
for(int i=1;i<=n;i++)
{
p=w;
cin>>k;
for(int j=1;j<=k;j++)
{
cin>>q[w].id>>q[w].score;
q[w].flag=i;
w++;
}
sort(q+p,q+w,comp); //对 [p,w)区间排序
for(int j=p;j<w;j++) //在存的结构体中的 [p,w) 区间中确定本地排名
{
int l=j;
while(q[l].score==q[l-1].score && l>p) //确保分数一样的名次相同
l--;
q[j].lo_rank=l-p+1;
}
sum+=k;
}
sort(q+1,q+1+sum,comp);
for(int i=1;i<=sum;i++)
{
int l=i;
while(q[l].score==q[l-1].score && l>1) //确保分数一样的名次相同
l--;
q[i].t_rank=l;
}
cout<<sum<<endl;
for(int i=1;i<=sum;i++)
{
cout<<q[i].id<<" "<<q[i].t_rank<<" "<<q[i].flag<<" "<<q[i].lo_rank<<endl;
}
return 0;
}