妹子(划掉)萌新求助
查看原帖
妹子(划掉)萌新求助
158171
SteveFang楼主2020/9/13 14:55

rt,这么弱的一道题都把蒟蒻虐了/kk

code:

#include <bits/stdc++.h>

using namespace std ;

const int MAXN = 1e5 + 10 ;

int t , n ;
int a[MAXN] ;

int main() {
	scanf("%d",&t) ;
	while(t --) {
		scanf("%d",&n) ;
		int maxn = INT_MIN ;

		vector <int> x ;
		vector <int> y ;

		for(int i=1; i<=n; ++i) {
			scanf("%d",a + i) ;
			if(a[i] > 0) {
				x.push_back(a[i]) ;
			} else if(a[i] < 0) {
				y.push_back(a[i]) ;
			}
		}
		sort(x.rbegin() , x.rend()) ;
		sort(y.begin() , y.end()) ;
//		for(int i=0;i<x.size();++i) {
//			cerr << x[i] << ' ' ;
//		}
//		cerr << '\n' ;
//		for(int i=0;i<y.size();++i) {
//			cerr << y[i] << ' ' ;
//		}
		if(x.size() > 4) {
			maxn = max(x[0] * x[1] * x[2] * x[3] * x[4] , maxn) ;//5 0
		}
		if(x.size() > 2 && y.size() > 1) {
			maxn = max(x[0] * x[1] * x[2] * y[0] * y[1] , maxn) ;//3 2
		}
		if(x.size() > 0 && y.size() > 3) {
			maxn = max(x[0] * y[0] * y[1] * y[2] * y[3] , maxn) ;//1 4
		}
		if(x.size() >= 2 && y.size() >= 3) {
			maxn = max(x[x.size()-1] * x[x.size()-2] * y[y.size()-1] * y[y.size()-2] * y[y.size()-3] , maxn) ;//2 3
		}
		if(x.size() >= 4 && y.size() >= 1) {
			maxn = max(x[x.size()-1] * x[x.size()-2] * x[x.size()-3] * x[x.size()-4] * y[y.size()-1] , maxn) ;//4 1
		}
		if(y.size() >= 5) {
			maxn = max(y[y.size()-1] * y[y.size()-2] * y[y.size()-3] * y[y.size()-4] * y[y.size()-5] , maxn) ;//0 5
		}
		if(maxn == INT_MIN) {
			maxn = 0 ;
		}
		printf("%d\n",maxn) ;
	}
	return 0 ;
}

其中 x 表示所有的正数(按照大小排序)

y 表示所有的负数(按照绝对值大小排序)

思路:贪心

如果这个数是正数就让它尽可能地大,否则让他尽可能地小

2020/9/13 14:55
加载中...