제출 #1024950

#제출 시각아이디문제언어결과실행 시간메모리
1024950TonylUnscrambling a Messy Bug (IOI16_messy)C++17
38 / 100
1 ms604 KiB
#include <vector> #include "messy.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using vi = vector<int>; #define REP(i,n) for (int i = 0; i < n; i++) #define all(x) (x).begin(), (x).end() #define trav(x) for (auto &a : x) #define D(x) cerr << #x << ": " << x << endl; int n; vi perm; // from where? vi to; vi shfl; vi antishfl; vector<char> reor(vector<char>& vc) { vector<char> cp(n); REP(i,n) { cp[i] = vc[shfl[i]]; //cerr << cp[i]; } //cerr << endl; return cp; } vector<int> reor(vector<int>& vc) { vector<int> cp(n); REP(i,n) { cp[i] = vc[shfl[i]]; //cerr << cp[i]; } //cerr << endl; return cp; } vi antireor(vector<int>& nums) { vi cp(n); REP(i,n) { cp[shfl[i]] = nums[i]; } return cp; } vi anti(vi nums) { vi cp(n); REP(i,n) { cp[nums[i]] = i; } return cp; } bool check(vector<char>& vc) { vector<char> cp = reor(vc); return check_element(string(all(cp))); } void add(vector<char>& vc) { vector<char> cp = reor(vc); add_element(string(all(cp))); } void prep_learn(int am) { vector<char> st(n, '0'); REP(i,am) { st[i] = '1'; add(st); } } void learn_brute(int am) { vector<char> st(n, '0'); REP(i,am) { REP(j,n) { if (st[j] == '1') continue; st[j] = '1'; if (check(st)) { to[i] = j; perm[antishfl[j]] = antishfl[i]; break; } else st[j] = '0'; } } } std::vector<int> restore_permutation(int n_, int w, int r) { n = n_; perm = vi(n,-1); to = vi(n,-1); shfl = vi(n); iota(all(shfl), 0); random_shuffle(all(shfl)); antishfl = anti(shfl); prep_learn(n); compile_set(); learn_brute(n); 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...