Submission #1256219

#TimeUsernameProblemLanguageResultExecution timeMemory
1256219biankHack (APIO25_hack)C++20
100 / 100
81 ms964 KiB
#include "hack.h"
#include <bits/stdc++.h>

#define forn(i, n) for (int i = 0; i < int(n); i++)
#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)

#define sz(x) (int) x.size()
#define all(x) begin(x), end(x)

using namespace std;

#define pb push_back

using ll = long long;
using vi = vector<int>;

bool query(ll l, ll r) {
    ll base = sqrt(r - l + 1);
    vector<ll> v;
    forsn(i, 1, base + 1) v.pb(i);
    ll curr = base + l;
    while (curr <= r) {
        v.pb(curr);
        curr += base;
    }
    v.pb(r + 1);
    return collisions(v) != 0;
}

vector<ll> primes(ll n) {
    vector<ll> p;
    for (ll i = 2; i * i <= n; i++) {
        if (n % i == 0) p.pb(i);
        while (n % i == 0) n /= i;
    }
    if (n != 1) p.pb(n);
    return p;
}

int hack() {
    ll lo = 5e8, hi = 1e9;
    while (hi - lo > 1) {
        ll mid = (lo + hi) / 2;
        if (query(lo + 1, mid)) hi = mid;
        else lo = mid;
    }
    for (ll p : primes(hi)) {
        while (hi % p == 0) {
            if (collisions(vector<ll>{(hi / p), 2 * (hi / p)})) hi /= p;
            else break;
        }
    }
    return hi;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...