제출 #1111659

#제출 시각아이디문제언어결과실행 시간메모리
1111659GrayUnscrambling a Messy Bug (IOI16_messy)C++17
100 / 100
2 ms804 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ff first #define ss second #define INF 2e18 #include "messy.h" void add_element_connector(string &s){ add_element(s); // cout << "Add: " << s << endl; } bool check_element_connector(string &s){ bool res=check_element(s); // cout << "Check: " << s << ": " << res << endl; return res; } void gen(ll l, ll r, ll n){ if (l>=r) return; string s = ""; for (ll i=0; i<n; i++) s+="1"; for (ll i=l; i<=r; i++) s[i]='0'; ll mid = (l+r)/2; for (ll i=l; i<=mid; i++){ s[i]='1'; add_element_connector(s); s[i]='0'; } gen(l, mid, n); gen(mid+1, r, n); } void restore(ll l, ll r, ll n, vector<ll> mem, vector<int> &perm){ if (l==r){ perm[mem[0]]=l; return; } string s = ""; for (ll i=0; i<n; i++) s+='1'; for (auto i:mem) s[i]='0'; vector<ll> lmem, rmem; for (auto i:mem){ s[i]='1'; if (check_element_connector(s)) lmem.push_back(i); else rmem.push_back(i); s[i]='0'; } ll mid = (l+r)/2; restore(l, mid, n, lmem, perm); restore(mid+1, r, n, rmem, perm); } std::vector<int> restore_permutation(int n, int w, int r) { gen(0, n-1, n); compile_set(); vector<int> perm(n); vector<ll> mem; for (ll i=0; i<n; i++) mem.push_back(i); restore(0, n-1, n, mem, perm); return perm; }
#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...