제출 #295129

#제출 시각아이디문제언어결과실행 시간메모리
295129Saboon자동 인형 (IOI18_doll)C++17
100 / 100
194 ms8152 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; const int maxn = 4e5 + 10; const int inf = 1e8; vector<int> X,Y; bool mark[maxn]; int n, Sz, newint = 1; int build(int L, int R, int x){ if (L+1 == R) return inf; int id = newint ++; X.push_back(1), Y.push_back(1); int mid = (L+R) >> 1; if (x < mid) X[id-1] = build(L, mid, x); Y[id-1] = build(mid, R, x); return id; } int assign(int id, int L, int R, int x){ if (id == 1) L = 0, R = Sz; if (L+1 == R) return -x; int mid = (L + R) >> 1; if (mark[id-1] == 0){ mark[id-1] ^= 1; X[id-1] = assign(X[id-1], L, mid, x); } else{ mark[id-1] ^= 1; Y[id-1] = assign(Y[id-1], mid, R, x); } return id; } void create_circuit(int m, vector<int> A){ n = A.size(); Sz = n+1; while (__builtin_popcount(Sz) != 1) Sz ++; vector<int> C(m+1); for (int i = 0; i < m+1; i++) C[i] = -1; build (0, Sz,Sz-n-1); for (int i = 0; i < n; i++) assign(1, 0, Sz, A[i]); assign(1, 0, Sz, 0); for (int i = 1; i < newint; i++) X[i-1] *= -1, Y[i-1] *= -1; 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...