:warning: test/Math/is_multiplication_overflow/abc169-b.test.cpp

Depends on

Code

// competitive-verifier: PROBLEM https://atcoder.jp/contests/abc169/tasks/abc169_b
// competitive-verifier: IGNORE
// AtCoder's test cases are now private.

#include "Math/is_multiplication_overflow.hpp"
#include <bits/stdc++.h>

using namespace std;

int main()
{
    long long N;
    cin >> N;

    vector<long long> A(N);
    for (int i = 0; i < N; i++)
    {
        cin >> A[i];
    }
    sort(A.begin(), A.end());

    long long LIMIT = 1000000000000000000;
    long long ans = 1;
    for (int i = 0; i < N; i++)
    {
        if (!is_multiplication_overflow(ans, A[i], LIMIT))
        {
            ans = ans * A[i];
        }
        else
        {
            ans = -1;
            break;
        }
    }

    cout << ans << endl;

    return 0;
}
#line 1 "test/Math/is_multiplication_overflow/abc169-b.test.cpp"
// competitive-verifier: PROBLEM https://atcoder.jp/contests/abc169/tasks/abc169_b
// competitive-verifier: IGNORE
// AtCoder's test cases are now private.

#line 1 "Math/is_multiplication_overflow.hpp"
bool is_multiplication_overflow(long long a, long long b, long long limit)
{
    return a == 0 ? false : (limit / a) < b;
}
#line 6 "test/Math/is_multiplication_overflow/abc169-b.test.cpp"
#include <bits/stdc++.h>

using namespace std;

int main()
{
    long long N;
    cin >> N;

    vector<long long> A(N);
    for (int i = 0; i < N; i++)
    {
        cin >> A[i];
    }
    sort(A.begin(), A.end());

    long long LIMIT = 1000000000000000000;
    long long ans = 1;
    for (int i = 0; i < N; i++)
    {
        if (!is_multiplication_overflow(ans, A[i], LIMIT))
        {
            ans = ans * A[i];
        }
        else
        {
            ans = -1;
            break;
        }
    }

    cout << ans << endl;

    return 0;
}
Back to top page