#include<bits/stdc++.h>
using namespace std;
map<pair<int,int>,int> F;
map<pair<int,int>,int> Id;
int N,K=1,Ans=0,Num[2],A[3];
/*
题意要求选一个或者选两个拼接起来后的长方体的内接球体积最大,即长方体最小的边最大.
只选一个的时候,Ans=max( min(a1,b1,c1),min(a2,b2,c2), ... ,min(an,bn,cn) ).
当选两个拼接的时候,假设a<=b<=c,我们只在拼接bc面的时候对答案有贡献.
所以用map记录下每个(b,c)对应的a,更新Ans=min(F[make_pair(A[1],A[2])]+A[0],A[1]),再保存一下id即可.
*/
int main()
{
cin.sync_with_stdio(false);
cin>>N;
for (int i=1;i<=N;i++)
{
cin>>A[0]>>A[1]>>A[2];
sort(A,A+3);
if (A[0]>=Ans)
Ans=A[0],K=1,Num[0]=i;
if (min(F[make_pair(A[1],A[2])]+A[0],A[1])>Ans)
Ans=min(F[make_pair(A[1],A[2])]+A[0],A[1]),K=2,Num[0]=i,Num[1]=Id[make_pair(A[1],A[2])];
if (A[0]>F[make_pair(A[1],A[2])])
F[make_pair(A[1],A[2])]=A[0],Id[make_pair(A[1],A[2])]=i;
}
cout<<K<<endl;
for (int i=0;i<K;i++)
cout<<Num[i]<<' ';
return 0;
}
CodeForces 733D Kostya the Sculptor 思维题
最新推荐文章于 2017-09-05 17:59:54 发布