Submission #940790

#TimeUsernameProblemLanguageResultExecution timeMemory
940790snpmrnhlolMechanical Doll (IOI18_doll)C++17
37 / 100
99 ms12240 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; void create_circuit(int m, vector<int> a) { int n = a.size(); int len = 0; int cnt = -2; while((1<<len) < n + 1)len++; vector <int> c(m + 1); vector <int> x((1<<len) - 1); vector <int> y((1<<len) - 1); vector <array<int,3>> ord; for(int i = 0;i < m + 1;i++){ c[i] = -1; } auto dfs = [&](auto self,int node,int d) -> void { if(d == len - 1){ x[-node - 1] = -1; y[-node - 1] = -1; }else{ x[-node - 1] = cnt--; self(self,cnt + 1,d + 1); y[-node - 1] = cnt--; self(self,cnt + 1,d + 1); } }; int cnt2 = 0,last = 0; auto dfs2 = [&](auto self,int node,int d) -> void { if(d == len - 1){ int nr = 0; for(int j = 0;j < len;j++){ if(cnt2>>j&1){ nr|=(1<<(len - j - 1)); } } if(cnt2 < n)ord.push_back({nr,node,0}); cnt2++; if(cnt2 < n)ord.push_back({nr + (1<<len),node,1}); cnt2++; last = node; }else{ self(self,-x[node] - 1,d + 1); self(self,-y[node] - 1,d + 1); } }; dfs(dfs,-1,0); dfs2(dfs2,0,0); int cnt3 = 0; sort(ord.begin(),ord.end()); for(auto i:ord){ //cout<<i[0]<<' '<<i[1]<<' '<<i[2]<<'\n'; if(i[2] == 0){ x[i[1]] = a[cnt3]; }else{ y[i[1]] = a[cnt3]; } cnt3++; } y[last] = 0; /*for(int i = 0;i < (1<<len) - 1;i++){ cout<<x[i]<<' '<<y[i]<<'\n'; }*/ return answer(c,x,y); } /** 5 4 1 2 3 1 **/
#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...