Submission #899074

#TimeUsernameProblemLanguageResultExecution timeMemory
899074jamjanekAncient Machine 2 (JOI23_ancient2)C++17
10 / 100
160 ms1820 KiB
#include "ancient2.h" #include<bits/stdc++.h> using namespace std; bool prefix(int k){ int m = k+1+2; vector<int>a(m), b(m); for(int i=0;i<k;i++){ a[i] = i+1; b[i] = i+1; } a[k] = k+1; b[k] = k+2; a[k+2] = k+2; b[k+2] = k+2; a[k+1] = k+1; b[k+1] = k+1; return Query(m,a,b)==(k+2); } string PoznajSufix(int k){ string s="2"; while((int)s.size()-1<k){ s[0]='0'; s = '2' + s; int m = s.size(); vector<int>a(m), b(m); vector<int>kmp(m); kmp[0] = 0; kmp[1] = 0; // printf("kmp sie liczy:\n");int pomin;scanf("%d", &pomin); for(int i=2;i<m;i++){ int j = kmp[i-1]; while(j!=0 && s[j+1]!=s[i]) j = kmp[j]; if(s[j+1]==s[i]) j++; kmp[i] = j; } // printf("kmp sie policzylo\n");pomin;scanf("%d", &pomin); for(int i=0;i<m-1;i++){ if(s[i+1]=='0'){ a[i] = i+1; int j = kmp[i]; while(s[j+1]!='1' && j!=0)j = kmp[j]; if(s[j+1]=='1')j++; b[i] = j; } else if(s[i+1]=='1'){ int j = kmp[i]; while(s[j+1]!='0' && j!=0)j = kmp[j]; if(s[j+1]=='0')j++; a[i] = j; b[i] = i+1; } //a[i]++; //b[i]++; } // printf("ostatniakra\n"); int j = kmp[m-1]; while(s[j+1]!='0' && j!=0)j = kmp[j]; if(s[j+1]=='0')j++; a[m-1] = j; j = kmp[m-1]; while(s[j+1]!='1' && j!=0)j = kmp[j]; if(s[j+1]=='1')j++; b[m-1] = j; /* cout<<s<<"\n"; for(auto j: kmp) cout<<j<<" "; cout<<"\n"; for(auto j: a) cout<<j<<" "; cout<<"\n"; for(auto j: b) cout<<j<<" "; cout<<"\n";*/ if(Query(m, a, b)!=m-1) s[1] = '1'; // cout<<" "<<s<<"\n"; } reverse(s.begin(), s.end());s.pop_back();reverse(s.begin(), s.end()); return s; } string Solve(int N) { /* string s; while((int)s.size()<N){ s.push_back('0'+prefix(s.size())); }*/ string sufix; sufix = PoznajSufix(N); // cout<<sufix<<"\n"; return sufix; }
#Verdict Execution timeMemoryGrader output
Fetching results...