#include "ancient2.h"
#include<bits/stdc++.h>
using namespace std;
std::string Solve(int N) {
string ans(N,0);
for(int i=0;i<N;i++){
if(i+3<=102){
vector<int>a(i+3),b(i+3);
for(int j=0;j<i;j++){
a[j]=b[j]=j+1;
}
a[i]=i+1;
b[i]=i+2;
a[i+1]=b[i+1]=i+1;
a[i+2]=b[i+2]=i+2;
ans[i]=Query(i+3,a,b)==i+2;
}else{
int ind6=-1,ty6=-1,sz6=INT_MAX;
for(int j=i-1;6<=j;j--){
int sz=(j+1)/7;
if(!ans[j]&&ans[j-sz]&&ans[j-2*sz]&&ans[j-3*sz]&&ans[j-4*sz]&&ans[j-5*sz]&&ans[j-6*sz]){
ind6=j;
ty6=0;
sz6=i-6*sz;
break;
}
if(ans[j]&&!ans[j-sz]&&!ans[j-2*sz]&&!ans[j-3*sz]&&!ans[j-4*sz]&&!ans[j-5*sz]&&!ans[j-6*sz]){
ind6=j;
ty6=1;
sz6=i-6*sz;
break;
}
}
int ind5=-1,ty5=-1,sz5=INT_MAX;
for(int j=i-1;5<=j;j--){
int sz=(j+1)/6;
if(!ans[j]&&ans[j-sz]&&ans[j-2*sz]&&ans[j-3*sz]&&ans[j-4*sz]&&ans[j-5*sz]){
ind5=j;
ty5=0;
sz5=i-5*sz;
break;
}
if(ans[j]&&!ans[j-sz]&&!ans[j-2*sz]&&!ans[j-3*sz]&&!ans[j-4*sz]&&!ans[j-5*sz]){
ind5=j;
ty5=1;
sz5=i-5*sz;
break;
}
}
int ind4=-1,ty4=-1,sz4=INT_MAX;
for(int j=i-1;4<=j;j--){
int sz=(j+1)/5;
if(!ans[j]&&ans[j-sz]&&ans[j-2*sz]&&ans[j-3*sz]&&ans[j-4*sz]){
ind4=j;
ty4=0;
sz4=i-4*sz;
break;
}
if(ans[j]&&!ans[j-sz]&&!ans[j-2*sz]&&!ans[j-3*sz]&&!ans[j-4*sz]){
ind4=j;
ty4=1;
sz4=i-4*sz;
break;
}
}
auto f=[&](int ind,int szz,int ty,int gy)-> void {
vector<int>a(szz+3),b(szz+3);
for(int j=0;j<szz;j++){
a[j]=b[j]=j+1;
}
int sz=(ind+1)/(gy+1);
if(ty){
a[ind-gy*sz]=ind-(gy+1)*sz+1;
}else{
b[ind-gy*sz]=ind-(gy+1)*sz+1;
}
a[szz]=szz+1;
b[szz]=szz+2;
a[szz+1]=b[szz+1]=szz+1;
a[szz+2]=b[szz+2]=szz+2;
ans[i]=Query(szz+3,a,b)==szz+2;
};
if(sz4<=sz5&&sz4<=sz6){
f(ind4,sz4,ty4,4);
}else if(sz5<=sz6){
f(ind5,sz5,ty5,5);
}else{
f(ind6,sz6,ty6,6);
}
}
}
for(char&c:ans)c+='0';
return ans;
}
/*
std::string Solve(int N) {
int m = 2;
std::vector<int> a(m), b(m);
a[0] = 0;
a[1] = 1;
b[0] = 0;
b[1] = 1;
variable_example = Query(m, a, b);
std::string s(N, '0');
s[0] = '1';
return s;
}
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |