# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
766007 | 2023-06-25T08:43:53 Z | ono_de206 | 자동 인형 (IOI18_doll) | C++14 | 0 ms | 0 KB |
#include "doll.h" #include<bits/stdc++.h> using namespace std; #define in insert #define all(x) x.begin(),x.end() #define pb push_back #define eb emplace_back #define ff first #define ss second // #define int long long typedef long long ll; typedef vector<int> vi; typedef set<int> si; typedef multiset<int> msi; typedef pair<int, int> pii; typedef vector<pii> vpii; void create_circuit(int m, std::vector<int> a) { int n = a.size(); vector<int> c(m + 1, 0), x, y; vector<vector<int>> g(m + 1); a.pb(0); g[0].pb(a[0]); for(int i = 0; i < n; i++) { g[a[i]].pb(a[i + 1]); } auto add = [&](int X, int Y) -> void { x.pb(X); y.pb(Y); return -(int)x.size(); } for(int i = 0; i <= m; i++) { int sz = g[i].size(); if(sz == 0) continue; int tmp = 1; while(tmp * 2 < sz) tmp *= 2; while(g[i].size() < tmp) g[i].pb(0); vector<int> tmp; while(g[i].size() > 1) { for(int j = 0; j < g[i].size(); j += 2) { tmp.pb(add(g[i][j], g[i][j + 1])); } swap(tmp, g[i]); } c[i] = g[i][0]; } answer(c, x, y); }