제출 #793969

#제출 시각아이디문제언어결과실행 시간메모리
793969fatemetmhr자동 인형 (IOI18_doll)C++17
10 / 100
37 ms47964 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define mp make_pair #define fi first #define se second #define pb push_back typedef long long ll; const int maxn5 = 1e6 + 10; int newnode = 0; vector <int> c, x, y; vector <pair<int, int>> av[maxn5]; int build(int n){ int rt = newnode++; x.pb(0); y.pb(0); if(n == 2){ av[rt].pb({rt, 0}); av[rt].pb({rt, 1}); return rt; } int a = (n / 2); if(n & 1) a++; int r1 = build(a), r2 = build(a); x[rt] = -(r1 + 1); y[rt] = -(r2 + 1); //cout << "building " << n << ' ' << rt << ' ' << r1 << ' ' << r2 << endl; for(int i = 0; i < a; i++){ if(n & 1){ if(av[r1][i].se) y[av[r1][i].fi] = -(rt + 1); else x[av[r1][i].fi] = -(rt + 1); } else av[rt].pb(av[r1][i]); av[rt].pb(av[r2][i]); } return rt; } void create_circuit(int m, std::vector<int> a) { int n = a.size(); if(n == 1){ c.pb(a[0]); for(int i = 0; i < m; i++) c.pb(0); answer(c, x, y); return; } build(n); c.pb(a[0]); for(int i = 0; i < m; i++) c.pb(-1); a.pb(0); for(int i = 0; i < n; i++){ if(av[0][i].se) y[av[0][i].fi] = a[i + 1]; else x[av[0][i].fi] = a[i + 1]; } answer(c, x, y); return; }
#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...