제출 #586184

#제출 시각아이디문제언어결과실행 시간메모리
586184Do_you_copyUnscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
3 ms468 KiB
#include <bits/stdc++.h> #include <messy.h> #define taskname "test" #define fi first #define se second #define pb push_back #define faster ios_base::sync_with_stdio(0); cin.tie(0); using namespace std; using ll = long long; using pii = pair <int, int>; ll min(const ll &a, const ll &b){ return (a < b) ? a : b; } ll max(const ll &a, const ll &b){ return (a > b) ? a : b; } const ll Mod = 1000000007; const int maxN = 1e5 + 1; int n; int a[128]; int hiddenarray[] = {3, 1, 7, 4, 5, 0, 6, 2}; vector <string> v; struct TNode{ vector <int> q; }; /* void add_element(string s){ v.pb(s); } void compile_set(){ for (string &t: v){ string tt = t; for (int i = 0; i < n; ++i){ tt[i] = t[hiddenarray[i]]; } t = tt; } } bool check_element(string s){ for (string t: v){ if (s == t) return 1; } return 0; }*/ void dnc(int l, int r){ if (l == r) return; int m = (l + r) / 2; string s = ""; for (int i = 1; i < l; ++i) s += '1'; for (int i = l; i <= r; ++i) s += '0'; for (int i = r + 1; i <= n; ++i) s += '1'; for (int i = l; i <= m; ++i){ s[i - 1] = '1'; add_element(s); s[i - 1] = '0'; } dnc(l, m); dnc(m + 1, r); } void dncreturnans(int l, int r, string s){ vector <int> left, right; for (int i = 0; i < n; ++i){ if (s[i] == '0'){ s[i] = '1'; if (check_element(s)){ left.pb(i); } else right.pb(i); s[i] = '0'; } } if (r - l == 1){ a[left[0]] = l - 1; a[right[0]] = r - 1; return; } int m = (l + r) / 2; for (int i: right) s[i] = '1'; dncreturnans(l, m, s); for (int i: right) s[i] = '0'; for (int i: left) s[i] = '1'; dncreturnans(m + 1, r, s); } vector <int> restore_permutation(int N, int w, int r){ n = N; vector <int> b; dnc(1, n); compile_set(); string s; for (int i = 1; i <= n; ++i) s += '0'; dncreturnans(1, n, s); for (int i = 0; i < n; ++i) b.pb(a[i]); return b; }
#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...