Submission #1204992

#TimeUsernameProblemLanguageResultExecution timeMemory
1204992Kel_MahmutHack (APIO25_hack)C++20
68 / 100
139 ms1308 KiB
#include "hack.h"
#include <vector>
#include <bits/stdc++.h>
#define pb push_back
#define endl ("\n")
#define all(aa) aa.begin(), aa.end()
typedef long long ll;
using namespace std;

const int N = 1e9;
const int N2 = 5e8;
const int k = 7700;
const int b2 = N2 / k;
const int b = N / k;

int hack(){
    vector<ll> s(k);
    for(int i = 0; i < k; i++) s[i] = i + 1;
    function<ll(int, int)> get = [&](int tl, int tr){
        vector<ll> r;
        for(int i = tl; i <= tr; i++){
            if((i + 1) * k <= k) continue;
            r.pb((i + 1) * k);
        }
        for(int i : s) r.pb(i);
        return collisions(r);
    };
    function<int(int)> fin_get = [&](int x){
        // [x * k, x * (k + 1))
        int tl = 1, tr = k;
        while(tr > tl){
            // cout << tl << ' ' << tr << ' ';
            int tm = (tl + tr + 1) / 2;
            vector<ll> r = {k * (x + 1)};
            for(int i = tm; i <= tr; i++){
                if(k * (x + 1) <= i) continue;
                r.pb(i);
            }
            ll ok = collisions(r);
            // cout << ok << endl;
            if(ok)
                tl = tm;
            else
                tr = tm - 1;
        }
        return (x + 1) * k - tl;
    };
    int tl = b2, tr = b;
    while(tl < tr){
        int tm = (tl + tr) / 2;
        if(get(tl, tm))
            tr = tm;
        else
            tl = tm + 1;
    }
    int ans = fin_get(tl);
    int res = ans;
    for(int i = 2; i * i <= ans; i++){
        while(ans % i == 0){
            if(collisions({1ll, res / i + 1})){
                ans /= i;
                res /= i;
            }
            else
                break;
        }
        while(ans % i == 0){
            ans /= i;
        }
    }
    if(ans > 1 && collisions({1ll, (ll) res / ans + 1}))
        res /= ans;
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...