제출 #430437

#제출 시각아이디문제언어결과실행 시간메모리
430437MamedovUnscrambling a Messy Bug (IOI16_messy)C++17
100 / 100
6 ms588 KiB
#include <bits/stdc++.h> #include "messy.h" using namespace std; void Adds(int n, int l, int r) { if(r - l == 1) { string s(n, '1'); s[r] = '0'; add_element(s); }else { int mid = (l + r) >> 1; string s(n, '1'); for(int i = l; i <= r; ++i) { s[i] = '0'; } for(int i = l; i <= mid; ++i) { s[i] = '1'; add_element(s); s[i] = '0'; } Adds(n, l, mid); Adds(n, mid + 1, r); } } void Checks(int n, int l, int r, vector<int> &p) { if(r - l == 1) { string s(n, '1'); s[p[r]] = '0'; if(!check_element(s)) { swap(p[l], p[r]); } }else { int mid = (l + r) >> 1; string s(n, '1'); for(int i = l; i <= r; ++i) { s[p[i]] = '0'; } int i = l, j = r; while(i <= mid) { s[p[i]] = '1'; cerr << s << '\n'; if(check_element(s)) { s[p[i]] = '0'; ++i; }else { s[p[i]] = '0'; swap(p[i], p[j]); --j; } } Checks(n, l, mid, p); Checks(n, mid + 1, r, p); } } vector<int> restore_permutation(int n, int w, int r) { Adds(n, 0, n - 1); compile_set(); vector<int>p(n); for(int i = 0; i < n; ++i) { p[i] = i; } Checks(n, 0, n - 1, p); /// find inv. permutation vector<int>q(n); for(int i = 0; i < n; ++i) { q[p[i]] = i; } return q; }
#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...