제출 #58425

#제출 시각아이디문제언어결과실행 시간메모리
58425FLDutchmanUnscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
4 ms640 KiB
#include "messy.h" #include <bits/stdc++.h> using namespace std; typedef int INT; #define pb push_back #define FOR(i, l, r) for(int i = (l); i < (r); i++) #define fst first #define snd second #define int long long typedef vector<int> vi; typedef pair<int, int> ii; typedef vector<ii> vii; typedef long long ll; const ll INF = 1e15; int N; vector<INT> p; void buildSet(int l, int r){ //cout << "Building " << l << " " << r << endl; if(l + 1 == r) return; string s(N, '0'); FOR(i, 0, l) s[i] = '1'; FOR(i, r, N) s[i] = '1'; int m = (l+r)/2; FOR(i, l, m){ s[i] = '1'; add_element(s); s[i] = '0'; } buildSet(l, m); buildSet(m, r); } void getPerm(int l, int r, vi elems){ if(elems.size() == 1) { p[elems[0]] = l; return; } vi lelems, relems; string s(N, '1'); for(int i : elems) s[i] = '0'; for(int i : elems) { s[i] = '1'; if(check_element(s)) lelems.pb(i); else relems.pb(i); s[i] = '0'; } int m = (l+r)/2; getPerm(l, m, lelems); getPerm(m, r, relems); } std::vector<INT> restore_permutation(INT n, INT w, INT r) { N = n; p.assign(n, -1); buildSet(0, N); compile_set(); vi start; FOR(i, 0, N) start.pb(i); getPerm(0, N, start); return p; } /* 8 24 24 1 3 2 5 6 7 0 4 */
#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...