제출 #1311427

#제출 시각아이디문제언어결과실행 시간메모리
1311427Lakshya108Hack (APIO25_hack)C++20
0 / 100
2 ms836 KiB
#include <bits/stdc++.h>
#include "hack.h"
using namespace std;

#define pb push_back

const int N = 1e9;
const int B = (int)sqrt(N);

int collision(vector<int> v){
    sort(v.begin(), v.end());
    for(int i=1;i<(int)v.size();i++)
        if(v[i]==v[i-1]) return 1;
    return 0;
}

vector<int> fac(int x){
    vector<int> p;
    for(int i=2;i*i<=x;i++){
        if(x%i==0){
            p.pb(i);
            while(x%i==0) x/=i;
        }
    }
    if(x>1) p.pb(x);
    return p;
}

int hack(){
    int mn=(N>>1)/B, mx=N/B;
    vector<int>a,b;
    a.reserve(mx-mn+5);
    b.reserve(B+5);

    for(int i=1,j=mx;j>mn;j--,i+=B) a.pb(i);
    int c=a.back()+mn*B+B;
    for(int i=1;i<=B;i++) b.pb(c+i);

    auto g=[&](const vector<int>&x,const vector<int>&y){
        vector<int> v;
        v.reserve(x.size()+y.size());
        for(int i:x) v.pb(i);
        for(int i:y) v.pb(i);
        return collision(v);
    };

    while(a.size()>1||b.size()>1){
        if(a.size()>b.size()){
            int m=a.size()/2;
            vector<int>l(a.begin(),a.begin()+m),r(a.begin()+m,a.end());
            a=g(b,r)?r:l;
        }else{
            int m=b.size()/2;
            vector<int>l(b.begin(),b.begin()+m),r(b.begin()+m,b.end());
            b=g(r,a)?r:l;
        }
    }

    int x=b[0]-a[0];
    for(int p:fac(x)){
        while(x%p==0){
            int y=x/p;
            if(collision({1,y+1})) x=y;
            else break;
        }
    }

    return x;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...