Submission #6029907


Source Code Expand

// {{{
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
// }}}

using namespace std;

using ll = long long;
using ull = unsigned long long;
using ld = long double;

static constexpr int mod = (int)1e9 + 7;
static constexpr int inf = 100100100;
static constexpr ll linf = 1e18;
static constexpr double eps = 1e-9;
static constexpr double pi = 3.14159265359;

#define rep(i, n) for (ll i = 0; i < n; ++i)
#define rrep(i, n) for (ll i = n; i >= 0; --i)
#define all(c) begin(c), end(c)
#define rall(c) rbegin(c), rend(c)
#define pb push_back
#define ist insert
#define fst first
#define snd second


template <typename T>
T gcd(T a, T b) {
    while (b != 0) {
        T c = a;
        a = b;
        b = c % b;
    }
    return a;
}

template <typename T>
vector<T> prime_factorize(T num) {
    assert(num > 1);
    vector<T> factor;
    T n = sqrt(num) + 1;
    for (T i = 2; i < n; ++i) {
        while (num % i == 0) {
            num /= i;
            factor.push_back(i);
        }
    }
    if (num > 1) {
        factor.push_back(num);
    }
    return factor;
}

map<ll, vector<ll>> cache;
map<ll, vector<ll>> F;

int main() {
    // cin.tie(0);
    // ios_base::sync_with_stdio(false);
    ll N;
    cin >> N;
    vector<ll> A;
    rep (i, N) {
        ll a;
        cin >> a;
        A.pb(a);
    }
    for (ll a : A) {
        if (a > 1) {
            if (!cache.count(a)) {
                cache[a] = prime_factorize(a);
            }
            for (ll p : cache[a]) {
                F[p].pb(a);
            }
        }
        F[1].pb(a);
    }
    ll ans = 1;
    for (auto f : F) {
        if (f.snd.size() >= A.size() - 1) {
            ll g = f.snd[0];
            for (ll x : f.snd) {
                g = gcd(g, x);
            }
            ans = max(ans, g);
        }
    }
    cout << ans << endl;
}

Submission Info

Submission Time
Task C - GCD on Blackboard
User gochiusa
Language C++14 (Clang 3.8.0)
Score 300
Code Size 2240 Byte
Status AC
Exec Time 156 ms
Memory 25312 KiB

Judge Result

Set Name All Sample
Score / Max Score 300 / 300 0 / 0
Status
AC × 16
AC × 3
Set Name Test Cases
All sample_01, sample_02, sample_03, testcase_01, testcase_02, testcase_03, testcase_04, testcase_05, testcase_06, testcase_07, testcase_08, testcase_09, testcase_10, testcase_11, testcase_12, testcase_13
Sample sample_01, sample_02, sample_03
Case Name Status Exec Time Memory
sample_01 AC 3 ms 504 KiB
sample_02 AC 1 ms 256 KiB
sample_03 AC 2 ms 256 KiB
testcase_01 AC 78 ms 5364 KiB
testcase_02 AC 129 ms 7152 KiB
testcase_03 AC 2 ms 256 KiB
testcase_04 AC 156 ms 25312 KiB
testcase_05 AC 50 ms 2676 KiB
testcase_06 AC 115 ms 5492 KiB
testcase_07 AC 1 ms 256 KiB
testcase_08 AC 1 ms 256 KiB
testcase_09 AC 101 ms 7796 KiB
testcase_10 AC 113 ms 9076 KiB
testcase_11 AC 108 ms 7796 KiB
testcase_12 AC 7 ms 1180 KiB
testcase_13 AC 1 ms 256 KiB