30分结构体求调!
  • 板块题目总版
  • 楼主Curry_mvp
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/19 14:47
  • 上次更新2024/10/19 16:29:30
查看原帖
30分结构体求调!
1051943
Curry_mvp楼主2024/10/19 14:47

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;
}

结构体记录奖牌数量,三次排序取最大名次,最后一次排序回归原来的顺序再输出

2024/10/19 14:47
加载中...