https://www.luogu.com.cn/problem/P11185
亡羊补牢 补复赛呢
#include <bits/stdc++.h>
using namespace std;
#define int long long int
struct node
{
int i;
int Au;
int Ag;
int Cu;
int best;
//int jishuqi1;
//int jishuqi2;
//int jishuqi3;
};
const int maxn=2e5+5;
node a[maxn];
int n;
bool cmp1(node x,node y)
{
return x.Au>y.Au;
}
bool cmp2(node x,node y)
{
return x.Ag>y.Ag;
}
bool cmp3(node x,node y)
{
return x.Cu>y.Cu;
}
bool cmp4(node x,node y)
{
return x.i<y.i;
}
inline int read()
{
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9')
{if (ch=='-')
f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9')
{
x=x*10+ch-48;ch=getchar();
}
return x*f;
}
int maax(int x,int y,int z)
{
return min(min(x,y),min(y,z));
}
signed main ()
{
n=read();
for(int i=1;i<=n;i++)
{
a[i].Au=read();
a[i].Ag=read();
a[i].Cu=read();
//cin>>a[i].Au>>a[i].Ag>>a[i].Cu;
a[i].best=0;
a[i].i=i;
}
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++)
{
a[i].best=i;
}
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++)
{
a[i].best=min(i,a[i].best);
}
sort(a+1,a+n+1,cmp3);
for(int i=1;i<=n;i++)
{
a[i].best=min(i,a[i].best);
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i].Au<a[j].Au)
{
a[i].jishuqi1++;
}
if(a[i].Ag<a[j].Ag)
{
a[i].jishuqi2++;
}
if(a[i].Cu<a[j].Cu)
{
a[i].jishuqi3++;
}
}
a[i].best=maax(a[i].jishuqi1+1,a[i].jishuqi2+1,a[i].jishuqi3+1);
}*/
sort(a+1,a+n+1,cmp4);
for(int i=1;i<=n;i++)
{
cout<<a[i].best<<"\n";
}
return 0;
}
结构体记录奖牌数量,三次排序取最大名次,最后一次排序回归原来的顺序再输出