Submission #1206575

#TimeUsernameProblemLanguageResultExecution timeMemory
1206575StefanSebezHack (APIO25_hack)C++20
49.80 / 100
1364 ms3852 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=60000;
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...