Submission #801678

#TimeUsernameProblemLanguageResultExecution timeMemory
801678PixelCatUnscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
2 ms512 KiB
#include "messy.h" #ifdef NYAOWO #include "grader.cpp" #endif #include <bits/stdc++.h> #define For(i, a, b) for(int i = a; i <= b; i++) #define Forr(i, a, b) for(int i = a; i >= b; i--) #define F first #define S second #define eb emplace_back #define all(x) x.begin(), x.end() #define sz(x) ((int)x.size()) #define int LL using namespace std; using LL = long long; using pii = pair<int, int>; void prepare(int n, vector<int> cand, int lvl) { if(lvl < 0) return; string s; For(i, 1, n) s.push_back('1'); for(auto &i:cand) s[i] = '0'; vector<int> c1, c0; for(auto &i:cand) { if(i & (1 << lvl)) { s[i] = '1'; add_element(s); s[i] = '0'; c1.eb(i); } else { c0.eb(i); } } prepare(n, c0, lvl - 1); prepare(n, c1, lvl - 1); } void solve(int n, vector<int> cand, int lvl, int mask, vector<int> &ans) { if(lvl < 0) { // for(auto &i:cand) cerr << i << " "; // cerr << "?????\n"; ans[cand[0]] = mask; return; } string s; For(i, 1, n) s.push_back('1'); for(auto &i:cand) s[i] = '0'; vector<int> c1, c0; for(auto &i:cand) { s[i] = '1'; if(check_element(s)) c1.eb(i); else c0.eb(i); s[i] = '0'; } solve(n, c0, lvl - 1, mask, ans); solve(n, c1, lvl - 1, mask | (1 << lvl), ans); } vector<int32_t> restore_permutation(int32_t n, int32_t w, int32_t r) { int lg = __lg(n); vector<int> v(n); For(i, 0, n - 1) v[i] = i; prepare(n, v, lg - 1); compile_set(); vector<int> ans(n); solve(n, v, lg - 1, 0, ans); return vector<int32_t>(all(ans)); }
#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...