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 表示所有的负数(按照绝对值大小排序)
思路:贪心
如果这个数是正数就让它尽可能地大,否则让他尽可能地小