제출 #1032256

#제출 시각아이디문제언어결과실행 시간메모리
1032256coolboy19521Unscrambling a Messy Bug (IOI16_messy)C++17
70 / 100
3 ms848 KiB
#include "bits/stdc++.h" #include "messy.h" using namespace std; const int sz = 256; vector<string> qry; int an[sz]; int n; void gen_qry(int le, int ri) { int mi = le + (ri - le) / 2; string p(le - 1, '1'); string s(n - ri, '1'); string b(mi - le + 1, '0'); string f(ri - mi, '0'); for (int i = le; i <= mi; i ++) { b[i - le] = '1'; qry.push_back(p + b + f + s); b[i - le] = '0'; } if (le == ri) return; gen_qry(le, mi); gen_qry(mi + 1, ri); } void solve(int le, int ri, vector<int> bl) { int mi = le + (ri - le) / 2; string s(n, '0'); for (int ix : bl) s[ix] = '1'; vector<int> ls; for (int i = 0; i < n; i ++) if ('0' == s[i]) { s[i] = '1'; bool f = check_element(s); if (!f) bl.push_back(i); else ls.push_back(i); s[i] = '0'; } if (le == ri) { an[ls.back()] = le - 1; return; } solve(le, mi, bl); int m = mi - le + 1; for (int i = 0; i < m; i ++) bl.pop_back(); for (int ix : ls) bl.push_back(ix); solve(mi + 1, ri, bl); } vector<int> restore_permutation(int N, int w, int r) { n = N; gen_qry(1, n); for (auto s : qry) add_element(s); compile_set(); solve(1, n, {}); vector<int> p; for (int i = 0; i < n; i ++) p.push_back(an[i]); return p; }
#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...