제출 #1228747

#제출 시각아이디문제언어결과실행 시간메모리
1228747AmirAli_H1자동 인형 (IOI18_doll)C++17
100 / 100
128 ms13216 KiB
// In the name of Allah #include <bits/stdc++.h> #include "doll.h" using namespace std; typedef long long int ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef complex<ld> cld; #define all(x) (x).begin(),(x).end() #define len(x) ((ll) (x).size()) #define F first #define S second #define pb push_back #define sep ' ' #define endl '\n' #define Mp make_pair #define kill(x) cout << x << '\n', exit(0) #define set_dec(x) cout << fixed << setprecision(x); #define file_io(x,y) freopen(x, "r", stdin); freopen(y, "w", stdout); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxn = 1e6 + 4; int n, m, sz, szx; int A[maxn]; vector<int> Ax, ls; vector<int> Rx, R1, R2; void oprx(int l, int r) { if (r - l <= 1) return ; int mid = (l + r) / 2; oprx(l, mid); oprx(mid, r); vector<int> A1, A2; for (int i = l; i < r; i++) { if (i < mid) A1.pb(Ax[i]); else A2.pb(Ax[i]); } for (int i = l; i < r; i++) { if ((i - l) % 2 == 0) Ax[i] = A1[(i - l) / 2]; else Ax[i] = A2[(i - l) / 2]; } } int addx() { szx++; R1.pb(-1); R2.pb(-1); return -szx; } int solvex(vector<int> A) { if (*max_element(all(A)) == *min_element(all(A))) { return A[0]; } int v = addx(); vector<int> A1, A2; for (int i = 0; i < len(A); i++) { if (i % 2 == 0) A1.pb(A[i]); else A2.pb(A[i]); } int u1 = solvex(A1); int u2 = solvex(A2); int j = (-v) - 1; R1[j] = u1; R2[j] = u2; return v; } void create_circuit(int M, vector<int> Fx) { n = len(Fx); m = M; for (int i = 0; i < n; i++) A[i] = Fx[i]; A[n] = 0; n++; sz = (1 << __lg(n)); if (sz < n) sz *= 2; for (int i = 0; i < sz; i++) { if (i < sz - n) Ax.pb(0); else Ax.pb(1); } oprx(0, sz); int j = 0; ls.resize(sz); for (int i = 0; i < sz; i++) { if (Ax[i] == 0) ls[i] = -1; else { ls[i] = A[j]; j++; } } int v = solvex(ls); Rx.resize(m + 1); fill(all(Rx), -1); answer(Rx, R1, R2); }
#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...