제출 #1274823

#제출 시각아이디문제언어결과실행 시간메모리
1274823nicolo_010자동 인형 (IOI18_doll)C++20
100 / 100
37 ms8284 KiB
#include <bits/stdc++.h> #include "doll.h" using namespace std; using ll = long long; using pii = pair<int, int>; int gen(vector<int> &after, vector<int> &X, vector<int> &Y, int &S) { int sz = after.size(); if (sz == 0) { return 0; } if (sz == 1) { return after[0]; } else { int b = 0; while ((1<<b) < sz) { b++; } int pw = (1<<b); vector<int> bits(pw), go(pw); for (int i=0; i<pw; i++) { bits[i] = (bits[i/2])/2 | ((i&1) << (b-1)); } int id = --S; for (int i=0; i<b-1; i++) { for (int j=0; j<(1<<i); j++) { if ((j << (b-i)) + (1 << (b-i)) <= (pw-sz)) { ; } else if ((j << (b-i)) + (1 << (b-i-1)) <= (pw-sz)) { X.push_back(id); Y.push_back(--S); } else { X.push_back(--S); Y.push_back(--S); } } } int j=0; for (int i=0; i<pw; i++) { if (bits[i] < (pw-sz)) { ; } else { go[bits[i]] = after[j++]; } } for (int i=0; i<pw/2; i++) { if (2*i + 2 <= (pw-sz)) { ; } else if (2*i+1 <= (pw-sz)) { X.push_back(id); Y.push_back(go[2*i+1]); } else { X.push_back(go[2*i]); Y.push_back(go[2*i+1]); } } return id; } } void create_circuit(int M, std::vector<int> A) { A.push_back(0); int N = A.size(); vector<int> C(M+1); vector<int> X, Y; int S=0; for (int i=0; i<N; i++) { ; } int id = gen(A, X, Y, S); for (int i=0; i<M+1; i++) { C[i] = id; } 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...