제출 #414470

#제출 시각아이디문제언어결과실행 시간메모리
414470sofapuden자동 인형 (IOI18_doll)C++14
0 / 100
1 ms204 KiB
#include "doll.h" #include<bits/stdc++.h> using namespace std; vector<int> X, Y, NOW; int cn = 0, cnt = 0; int N, h; void fin(int x, int n, int par, bool ok, int val, vector<int> &A){ if(x < 0)return; if(x < cnt-1){ NOW[x]^=1; if(NOW[x]){ if(Y[x] == -1)fin(0,N,0,0,1<<(h-1),A); else if(Y[x] != 5)fin((-Y[x])-1,min(n,val),x,1,val>>1,A); else{ X.push_back(5); Y.push_back(5); NOW.push_back(0); fin(cnt++, min(n,val),x,1,val>>1,A); } } else { if(X[x] == -1)fin(0,N,0,0,1<<(h-1),A); else if(X[x] != 5)fin((-X[x])-1,max(n-val,0),x,0,val>>1,A); else fin(cnt++, max(n-val,0),x,0,val>>1,A); } return; } if(!n){ cout << "HEY\n" << par << "\n"; if(ok)Y[par] = -1; else X[par] = -1; cnt--; X.pop_back(); Y.pop_back(); NOW.pop_back(); fin(0,N,0,0,1<<(h-1),A); return; } if(!val){ if(ok)Y[par] = A[cn++]; else X[par] = A[cn++]; cnt--; X.pop_back(); Y.pop_back(); NOW.pop_back(); if(cn == N)return; fin(0,N,0,0,1<<(h-1),A); return; } if(x != 0){ if(ok)Y[par] = (-x)-1; else X[par] = (-x)-1; } X.push_back(5); Y.push_back(5); NOW.push_back(0); fin(cnt++,max(n-val,0),x,0,val>>1,A); } void create_circuit(int m, vector<int> A) { A.push_back(0); N = A.size(); h = (int)(ceil(log2(N))); vector<int> C(m + 1,-1); X.push_back(5); Y.push_back(5); NOW.push_back(0); fin(0,N,0,0,1<<(h-1),A); cout << "CN: " << cn << "\n"; cout << "CNT: " << cnt << "\n"; for(int i : X)cout << i << " "; cout << "\n"; for(int i : Y)cout << i << " "; cout << "\n"; 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...