这道题我用的排序+贪心
#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;
}