求这道题更多的方法(骗题解)
查看原帖
求这道题更多的方法(骗题解)
501028
spider_oyster楼主2022/10/17 17:25

这道题我用的排序+贪心

#include<bits/stdc++.h>
using namespace std;
inline int min(int x,int y) {return x<y?x:y;}

const int N=5e5+10;
int n,r1_max,p1,p2;
bool f;
struct node{
	int r1,r2,r3,id;
	bool operator<(const node &x)
	{
		if(r2!=x.r2) return r2<x.r2;
		if(r3!=x.r3) return r3<x.r3;
		return r1>x.r1;
	}
}a[N];

int main()
{
	scanf("%d",&n);
	int x,y,z;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		if(x>y) swap(x,y);
		if(y>z) swap(y,z);
		if(x>y) swap(x,y);
		if(x>r1_max)
		{
			r1_max=x;
			p1=i;
		}
		a[i].r1=x,a[i].r2=y,a[i].r3=z,a[i].id=i;
	}
	sort(a+1,a+1+n);
	for(int i=2;i<=n;i++)
		if(a[i].r2==a[i-1].r2&&a[i].r3==a[i-1].r3)
		{
			int now=min(a[i].r1+a[i-1].r1,min(a[i].r2,a[i].r3));
			if(now>r1_max)
			{
				r1_max=now;
				p1=a[i].id;
				p2=a[i-1].id;
				f=1;
			}
		}
	if(f) printf("1\n%d %d\n",min(p1,p2),max(p1,p2));
	else printf("0\n%d\n",p1);
	printf("%lld",1ll*r1_max*r1_max*r1_max/4);
	return 0;
}
2022/10/17 17:25
加载中...