求助90pts
查看原帖
求助90pts
554803
After_light楼主2022/10/16 14:13

TLE 90pts

#include<bits/stdc++.h>
#define sc(a) scanf("%lld",&a)
#define ps(a) printf("%lld ",a)
#define pn(a) printf("%lld\n",a)
using namespace std;
typedef long long ll;
#define FOR(i,a,b) for(ll i=a;i<=b;i++)
#define ROF(i,a,b) for(ll i=a;i>=b;i--)
const ll N=1e5+7;
ll n,a,b,c,ans1=-99999999999999,ans2=-999999999999999,id1,id2,id3,opt;
map<pair<ll,ll>,pair<ll,ll> >m;
inline ll Min(ll a,ll b,ll c){
	return min(a,min(b,c));
}
int main(){
	sc(n);
	FOR(i,1,n){
		sc(a),sc(b),sc(c);
		if(m.find(make_pair(a,b))!=m.end()){
			if(ans2<ll(floor(1/4.0*Min(a,b,c+m[make_pair(a,b)].first)*Min(a,b,c+m[make_pair(a,b)].first)*Min(a,b,c+m[make_pair(a,b)].first)))) ans2=ll(floor(1/4.0*Min(a,b,c+m[make_pair(a,b)].first)*Min(a,b,c+m[make_pair(a,b)].first)*Min(a,b,c+m[make_pair(a,b)].first))),id2=m[make_pair(a,b)].second,id3=i;
		}
		if(m.find(make_pair(b,c))!=m.end()){
			if(ans2<ll(floor(1/4.0*Min(a+m[make_pair(b,c)].first,b,c)*Min(a+m[make_pair(b,c)].first,b,c)*Min(a+m[make_pair(b,c)].first,b,c)))) ans2=ll(floor(1/4.0*Min(a+m[make_pair(b,c)].first,b,c)*Min(a+m[make_pair(b,c)].first,b,c)*Min(a+m[make_pair(b,c)].first,b,c))),id2=m[make_pair(b,c)].second,id3=i;
		}
		if(m.find(make_pair(a,c))!=m.end()){
			if(ans2<ll(floor(1/4.0*Min(a,b+m[make_pair(a,c)].first,c)*Min(a,b+m[make_pair(a,c)].first,c)*Min(a,b+m[make_pair(a,c)].first,c)))) ans2=ll(floor(1/4.0*Min(a,b+m[make_pair(a,c)].first,c)*Min(a,b+m[make_pair(a,c)].first,c)*Min(a,b+m[make_pair(a,c)].first,c))),id2=m[make_pair(a,c)].second,id3=i;
		}
		if(m[make_pair(a,b)].first<c) m[make_pair(a,b)]=make_pair(c,i);
		if(m[make_pair(a,c)].first<b) m[make_pair(a,c)]=make_pair(b,i);
		if(m[make_pair(b,c)].first<a) m[make_pair(b,c)]=make_pair(a,i);
		if(m[make_pair(b,a)].first<c) m[make_pair(b,a)]=make_pair(c,i);
		if(m[make_pair(c,a)].first<b) m[make_pair(c,a)]=make_pair(b,i);
		if(m[make_pair(c,b)].first<a) m[make_pair(c,b)]=make_pair(a,i);
		if(ans1<ll(floor(1/4.0*Min(a,b,c)*Min(a,b,c)*Min(a,b,c)))){
			ans1=ll(floor(1/4.0*Min(a,b,c)*Min(a,b,c)*Min(a,b,c)));
			id1=i;
		}
	}
	if(ans1>=ans2){
		cout<<0ll<<endl<<id1<<endl<<ans1<<endl;
	} 
	else{
		cout<<1ll<<endl<<id2<<" "<<id3<<endl<<ans2<<endl;
	}
	return 0;
}
/*
4
1 6 6
2 6 6
0 6 6
3 6 6
*/
2022/10/16 14:13
加载中...