Submission #1206573

#TimeUsernameProblemLanguageResultExecution timeMemory
1206573StefanSebezHack (APIO25_hack)C++20
53.70 / 100
2235 ms3204 KiB
#include "hack.h" #include <vector> #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long #define ld long double /*const int N=1e6+10; vector<int>dvs[N+5];*/ const int M=40000; const ll inf=4e17; mt19937_64 rng(time(0)); ll Sredi(ll x){ ll res=x; vector<ll>p; for(int i=2;i<=sqrt(x);i++){ while(x%i==0){x/=i;p.pb(i);} } p.pb(x); for(auto i:p){ res/=i; if(collisions({1,res+1})==0) res*=i; } return res; } vector<ll> Resi(vector<ll>a){ int n=a.size(); vector<ll>b,c; for(int i=0;i<n;i++){ if(i<=(n-1)/2) b.pb(a[i]); else c.pb(a[i]); } if(collisions(b)) return Resi(b); if(collisions(c)) return Resi(c); return a; } ll DC(vector<ll>b,vector<ll>c){ if(b.size()==1&&c.size()==1) return abs(b[0]-c[0]); int l=0,r=b.size()-1,mid=l+r>>1; int L=0,R=c.size()-1,Mid=L+R>>1; vector<ll>b1,b2,c1,c2; for(int i=0;i<=mid;i++) b1.pb(b[i]); for(int i=mid+1;i<b.size();i++) b2.pb(b[i]); for(int i=0;i<=Mid;i++) c1.pb(c[i]); for(int i=Mid+1;i<c.size();i++) c2.pb(c[i]); vector<ll>temp; temp=b1;for(auto i:c1) temp.pb(i); if(collisions(temp)) return DC(b1,c1); temp=b1;for(auto i:c2) temp.pb(i); if(collisions(temp)) return DC(b1,c2); temp=b2;for(auto i:c1) temp.pb(i); if(collisions(temp)) return DC(b2,c1); temp=b2;for(auto i:c2) temp.pb(i); if(collisions(temp)) return DC(b2,c2); } int hack(){ /*for(int i=1;i<=N;i++) dvs[i].clear(); for(int i=1;i<=N;i++) for(int j=i;j<=N;j+=i) dvs[j].pb(i); int x=0; for(int i=N;i>=1&&x==0;i--){ if(collisions({1,i})==1){ x=i-1; } } int res=x; for(auto i:dvs[x]){ if(collisions({1,i+1})==1) res=min(res,i); } return res;*/ vector<ll>a; int ct=0; while(++ct){ a.clear(); for(int i=1;i<=M;i++) a.pb(rng()%inf+1); if(collisions(a)) break; } /*for(int i=1;i<=M/3;i++) a.pb(rng()%inf+1); while(!collisions(a)){ int n=a.size(); for(int i=1;2*i<=n;i++) a.pb(rng()%inf+1); }*/ a=Resi(a); int n=a.size(); cerr<<n<<endl; int Mid=(n-1)/2; vector<ll>b,c; for(int i=0;i<=Mid;i++) b.pb(a[i]); for(int i=Mid+1;i<n;i++) c.pb(a[i]); ll res=DC(b,c); /*int l=Mid+1,r=n-1,ind,ind1; while(l<r){ int mid=l+r>>1; //printf("%i %i %i\n",l,mid,r); vector<ll>temp; for(int i=0;i<=Mid;i++) temp.pb(a[i]); for(int i=l;i<=mid;i++) temp.pb(a[i]); if(collisions(temp)) r=mid; else l=mid+1; } ind=l; ll res=0; for(int i=0;i<=Mid;i++){ if(collisions({a[i],a[ind]})){res=abs(a[i]-a[ind]);break;} }*/ //ind1=l; //res=abs(a[ind]-a[ind1]); //cerr<<res<<endl; res=Sredi(res); return res; }

Compilation message (stderr)

hack.cpp: In function 'long long int DC(std::vector<long long int>, std::vector<long long int>)':
hack.cpp:57:1: warning: control reaches end of non-void function [-Wreturn-type]
   57 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...