제출 #1363108

#제출 시각아이디문제언어결과실행 시간메모리
1363108t6stksGingerbread (BOI25_gcd)C++20
0 / 100
1096 ms344 KiB
#include <bits/stdc++.h>
#define F first
#define S second
#define SZ(x) ((int)(x).size())
#define ALL(x) x.begin(), x.end()
#define MP make_pair

using namespace std;
using ll = long long;
using vi = vector<int>;
using vl = vector<ll>;
using vvi = vector<vi>;
using vvl = vector<vl>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vii = vector<pii>;
using vll = vector<pll>;

int calc_gcd(const vi& a) {
    int n = SZ(a);
    int g = 0;
    for (int i = 0; i < n; i++) {
        g = gcd(g, a[i]);
    }
    return g;
}

mt19937 rng(114514);
void sol() {
    int n;
    cin >> n;
    vi a(n);
    auto start = clock();
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    int ans = INT_MAX;
    while (clock() - start < CLOCKS_PER_SEC * 1.80) {
        int x = uniform_int_distribution(0, n - 2)(rng);
        int y = uniform_int_distribution(x + 1, n - 1)(rng);
        int l = 0, r = 50;
        while (l < r) {
            int mid = l + (r-l) / 2;
            bool ok = 0;
            for (int da = 0; da <= mid; da++) {
                int db = mid - da;
                a[x] += da; a[y] += db;
                if (calc_gcd(a) == 1) {
                    a[x] -= da; a[y] -= db;
                    ok = 1; break;
                }
                a[x] -= da; a[y] -= db;
            }
            if (ok) r = mid;
            else l = mid + 1;
        }
        ans = min(ans, l);
    }
    cout << ans << '\n';
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    sol();
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…