B. Maximum Product(贪心+枚举)

https://codeforces.com/contest/1406/problem/B


思路:直接正反两个排序,枚举正排序中选0~5个,反排序中选5-i个,枚举取最大就好了。

注意:longlong和最小值开大,-0x3f3f3f3f不够。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define debug(a) cout<<#a<<"="<b;
}
int main(void)
{
  cin.tie(0);std::ios::sync_with_stdio(false);
  LL t;cin>>t;
  while(t--){
  	LL n;cin>>n;
  	for(LL i=0;i<=n+10;i++) a[i]=b[i]=0;
  	for(LL i=1;i<=n;i++) {
  		cin>>a[i];b[i]=a[i];
	}
	sort(a+1,a+1+n);//小到大
	sort(b+1,b+1+n,cmp);//大到小
	LL ans=-1e18;
	for(LL i=0;i<=5;i++){//拿0,1,2,3,4,5个 
		LL j=5-i;LL sum=1;
		for(LL k=1;k<=i;k++){
			sum*=a[k];
		}
		for(LL k=1;k<=j;k++){
			sum*=b[k];
		}
		ans=max(ans,sum);
	} 
	cout<

 

你可能感兴趣的:(思维,贪心)