比较基础的一道结构体,但是一直wa,仔细看看后才发现,自己漏了一个总人数的输出。。。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=30005;
struct stu
{
int score;
string num;
int group;
int rank1;
int rank2;
}q[maxn];
int cmp1(stu a,stu b)
{
if(a.score==b.score)
{
return a.num<b.num;
}
return a.score>b.score;
}
int main()
{
int n;
scanf("%d",&n);
int cnt=1;
int g=1;
int b,e;
for(int i=1;i<=n;i++)
{
int k;
scanf("%d",&k);
b=cnt;
for(int j=1;j<=k;j++)
{
string s;
cin>>s;
int sc;
scanf("%d",&sc);
q[cnt].score=sc;
q[cnt].num=s;
q[cnt].group=i;
cnt++;
}
e=cnt-1;
// printf("%d--%d\n",b,e);
sort(q+b,q+e+1,cmp1);
int r=2;
q[b].rank1=1;
for(int l=b+1;l<=e;l++)
{
if(q[l].score==q[l-1].score)
{
q[l].rank1=q[l-1].rank1;
}
else q[l].rank1=r;
r++;
}
// for(int p=b;p<=e;p++)
// {
// printf("%d--%d\n",q[p].rank1,q[p].score);
// }
g++;
}
printf("%d\n",cnt-1);
sort(q+1,q+cnt,cmp1);
int r=2;
q[1].rank2=1;
for(int i=2;i<cnt;i++)
{
if(q[i].score==q[i-1].score)
{
q[i].rank2=q[i-1].rank2;
}
else q[i].rank2=r;
r++;
}
for(int i=1;i<cnt;i++)
{
cout<<q[i].num;
printf(" %d %d %d\n",q[i].rank2,q[i].group,q[i].rank1);
}
}