Submission #1096458

#TimeUsernameProblemLanguageResultExecution timeMemory
1096458guagua0407Mechanical Doll (IOI18_doll)C++17
100 / 100
198 ms26428 KiB
#include "doll.h" //#include "grader.cpp" #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define f first #define s second #define all(x) x.begin(),x.end() #define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); const int inf=1e9; void create_circuit(int m, std::vector<int> a) { int n=a.size(); int lg=__lg(n-1)+1; vector<int> state(1<<lg); vector<vector<int>> to(1<<lg,vector<int>(2,inf)); for(int i=1;i<(1<<lg);i++){ if(i*2<(1<<lg)) to[i][0]=-(i*2); if(i*2+1<(1<<lg)) to[i][1]=-(i*2+1); } vector<bool> ok(1<<lg); int bound=(1<<lg)-((n+1)/2); int diaob=0; for(int i=0;i<(1<<lg);i++){ int nxt=((i==(1<<lg)-1)?0:(diaob<n-1?a[diaob+1]:-1)); int cur=1; while(to[cur][state[cur]]!=inf){ state[cur]^=1; cur=-to[cur][state[cur]^1]; } if(nxt==0 or (nxt!=-1 and cur>=bound)){ to[cur][state[cur]]=nxt; state[cur]^=1; ok[cur]=true; diaob++; } else{ to[cur][state[cur]]=-1; state[cur]^=1; } } for(int i=(1<<lg)-1;i>=1;i--){ if(i*2<(1<<lg)) ok[i]=ok[i]|ok[i*2]; if(i*2+1<(1<<lg)) ok[i]=ok[i]|ok[i*2+1]; } vector<int> vec; for(int i=1;i<(1<<lg);i++){ if(ok[i]) vec.push_back(i); } vector<int> c(m+1,-1); c[0]=a[0]; vector<int> x(vec.size()),y(vec.size()); vector<int> id(1<<lg,inf); for(int i=0;i<(int)vec.size();i++){ id[vec[i]]=i+1; } for(int i=1;i<(1<<lg);i++){ if(i*2<(1<<lg) and !ok[-to[i][0]]) to[i][0]=-1; if(i*2+1<(1<<lg) and !ok[-to[i][1]]) to[i][1]=-1; } for(int i=0;i<(int)vec.size();i++){ x[i]=to[vec[i]][0]; y[i]=to[vec[i]][1]; if(x[i]<0) x[i]=-id[-x[i]]; if(y[i]<0) y[i]=-id[-y[i]]; //if(x[i]==0) swap(x[i],y[i]); } answer(c,x,y); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...