一直wa on 2,对拍一直没找出错来
#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read()
{
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
x = x * 10 + ch - '0', ch = getchar();
return x * f;
}
const int maxn = 300005;
int a[maxn], ans, cnt;
struct num
{
int opt, val;
bool operator<(const num &rhs) const
{
return val > rhs.val;
}
} b[maxn];
inline int max(int a, int b)
{
return a > b ? a : b;
}
signed main()
{
int t = read();
while (t--)
{
ans = -9223372036854775807;
// cout<<ans<<endl;
cnt = 0;
int n = read();
for (register int i = 1; i <= n; i++)
{
a[i] = read();
if (a[i] != 0)
b[i].opt = a[i] / abs(a[i]);
else
b[i].opt = 1;
b[i].val = abs(a[i]);
if (b[i].opt == 1)
cnt++;
}
sort(b + 1, b + 1 + n);
int sum1 = 0, sum2 = 0;
int cur = 1;
for (register int k = 0; k <= 5; k++)
{
sum1 = 5 - k;
sum2 = k;
cur = 1;
for (register int i = 1; i <= n; i++)
{
if (sum1 == 0 && sum2 == 0)
{
ans = max(ans, cur);
// cout<<ans<<endl;
break;
}
if (b[i].opt == 1 && sum1)
{
cur *= b[i].val * b[i].opt;
sum1--;
}
if (b[i].opt == -1 && sum2)
{
cur *= b[i].val * b[i].opt;
sum2--;
}
// cout<<cur<<endl;
}
if (sum1 == 0 && sum2 == 0)
ans = max(ans, cur);
}
if (sum1 == 0 && sum2 == 0)
ans = max(ans, cur);
cout << ans << endl;
}
return 0;
}