제출 #420330

#제출 시각아이디문제언어결과실행 시간메모리
420330dxz05Unscrambling a Messy Bug (IOI16_messy)C++14
0 / 100
1 ms332 KiB
#include <bits/stdc++.h> #include "messy.h" using namespace std; int n; void go(int l, int r){ if (l == r) return; int m = (l + r) >> 1; string s(n, '1'); for (int i = l; i <= m; i++) s[i] = '0'; add_element(s); //cout << s << endl; go(l, m); go(m + 1, r); } set<string> myset; vector<int> ans; void go2(int l, int r){ if (!ans.empty()) return; if (l == r) return; int m = (l + r) >> 1; string s(n, '1'); for (int i = l; i <= m; i++) s[i] = '0'; for (int i = l; i <= m; i++){ for (int j = m + 1; j <= r; j++){ string t = s; swap(t[i], t[j]); if (myset.find(t) != myset.end()){ for (int i = 0; i < n; i++) ans.push_back(i); swap(ans[i], ans[j]); return; } } } go2(l, m); go2(m + 1, r); } std::vector<int> restore_permutation(int _n, int w, int r) { n = _n; go(0, n - 1); compile_set(); for (int mask = 0; mask < (1 << n); mask++){ string s; for (int i = 0; i < n; i++){ s += ((mask & (1 << i)) ? '1' : '0'); } if (check_element(s)){ myset.insert(s); } } go2(0, n - 1); return ans; } /* 8 256 256 0 1 5 3 4 2 6 7 */
#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...