求hack
查看原帖
求hack
115003
te5555楼主2020/9/13 23:00

一直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;
}
2020/9/13 23:00
加载中...