基础实验7-2.4 PAT排名汇总 (25 分)
结构体排序
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
struct student{
string a;
int b,c,d;
}s[200000];
bool cmp1(struct student x,struct student y)
{
if(x.b>y.b)
return 1;
else
return 0;
}
bool cmp2(struct student x,struct student y)
{
if(x.b>y.b)
return 1;
else if(x.b==y.b){
if(x.a<y.a)
return 1;
}
return 0;
}
int main()
{
int n,k,i=0,ret=0;
cin>>n;
while(n--)
{
ret++;
cin>>k;
getchar();
for(int j=i;j<i+k;++j)
{
cin>>s[j].a>>s[j].b;
s[j].c=ret;
}
sort(s+i,s+i+k,cmp1);
int p=1,net=0;
s[i].d=p;
for(int j=i+1;j<i+k;++j)
{
if(s[j].b<s[j-1].b)
{
p=p+1+net;
s[j].d=p;
net=0;
}
else{
s[j].d=p;
net++;
}
}
i+=k;
}
sort(s,s+i,cmp2);
int p=1,net=0;
cout<<i<<endl;
cout<<s[0].a<<" "<<p<<" "<<s[0].c<<" "<<s[0].d<<endl;
for(int j=1;j<i;++j)
{
if(s[j].b<s[j-1].b)
{
p=p+1+net;
net=0;
}
else{
net++;
}
cout<<s[j].a<<" "<<p<<" "<<s[j].c<<" "<<s[j].d<<endl;
}
}