Submission #1253552

#TimeUsernameProblemLanguageResultExecution timeMemory
1253552noopHack (APIO25_hack)C++20
0 / 100
2 ms1864 KiB
#include "hack.h"
#include <bits/stdc++.h>
using namespace std;

bool query (const vector<long long>& a, const vector<long long>& b) {
    vector<long long> v;
    v.reserve(a.size()+b.size());
    for (size_t i=0; i<a.size(); ++i)
        v.push_back(a[i]);
    for (size_t i=0; i<b.size(); ++i)
        v.push_back(b[i]);
    return collisions(v);
}

void factor (long long x, vector<long long>& v) {
    vector<long long> ret;
    long long i=2;
    while (i*i<=x){
        if (!(x%i)){
            v.push_back(i);
            x/=i;
        }
        else
            ++i;
    }
    if (x>1)
        v.push_back(x);
}

int hack(){
    constexpr long long gap=31623;
    vector<long long> a,b;
    a.reserve(gap);
    b.reserve(gap);
    for (long long i=1; i<=gap; ++i)
        a.push_back(i);
    for (long long i=gap*(500000000/gap); i<=1000000000; i+=gap)
        b.push_back(i);
    while (a.size() || b.size()){
        vector<long long> l,r;
        if (a.size()>b.size()){
            l.reserve(a.size()>>1);
            r.reserve((a.size()>>1)+(a.size()&1));
            for (size_t i=0; i<a.size()>>1; ++i)
                l.push_back(a[i]);
            for (size_t i=b.size()>>1; i<a.size(); ++i)
                l.push_back(a[i]);
            if (query(l,b))
                a=l;
            else
                a=r;
        }
        else{
            l.reserve(b.size()>>1);
            r.reserve((b.size()>>1)+(b.size()&1));
            for (size_t i=0; i<b.size()>>1; ++i)
                l.push_back(b[i]);
            for (size_t i=b.size()>>1; i<b.size(); ++i)
                l.push_back(b[i]);
            if (query(l,a))
                b=l;
            else
                b=r;
        }
    }
    long long d=b[0]-a[0];
    vector<long long> factors;
    factor(d,factors);
    for (size_t i=0; i<factors.size(); ++i){
        if (collisions({1,d/factors[i]+1}))
            d/=factors[i];
    }
    return d;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...