Submission #1096433

#TimeUsernameProblemLanguageResultExecution timeMemory
1096433guagua0407Mechanical Doll (IOI18_doll)C++17
54.40 / 100
194 ms26648 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); } int diaob=(n+1)/2; for(int i=0;i<diaob;i++){ int nxt=a[i+1]; int cur=1; while(to[cur][state[cur]]!=inf){ state[cur]^=1; cur=-to[cur][state[cur]^1]; } to[cur][state[cur]]=nxt; state[cur]^=1; } for(int i=diaob;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 to[cur][state[cur]^1]!=inf)){ to[cur][state[cur]]=nxt; state[cur]^=1; diaob++; } else{ to[cur][state[cur]]=-1; state[cur]^=1; } } vector<int> vec; for(int i=1;i<(1<<lg);i++){ if(to[i][0]!=-1 or to[i][1]!=-1){ 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(id[i]==inf){ to[i/2][i-(i/2)*2]=((to[i][0]==-1)?to[i][1]:to[i][0]); } } 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...