Submission #1002422

#TimeUsernameProblemLanguageResultExecution timeMemory
1002422MilosMilutinovicSwap (BOI16_swap)C++14
48 / 100
108 ms262144 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; --a[i]; } vector<vector<vector<int>>> dp(n, vector<vector<int>>(n)); auto Merge = [&](int x, vector<int> va, vector<int> vb) { vector<int> v(1, x); int pa = 0, pb = 0; for (int pw = 1; pa < (int) va.size(); pw *= 2) { for (int iter = 0; iter < pw; iter++) { if (pa < (int) va.size()) { v.push_back(va[pa]); pa += 1; } else { break; } } for (int iter = 0; iter < pw; iter++) { if (pb < (int) vb.size()) { v.push_back(vb[pb]); pb += 1; } else { break; } } } return v; }; function<vector<int>(int, int)> Solve = [&](int i, int v) { if (i >= n) { return vector<int>{}; } if (!dp[i][v].empty()) { return dp[i][v]; } int L = i * 2 + 1, R = i * 2 + 2; if (L >= n) { return dp[i][v] = {v}; } if (R >= n) { return dp[i][v] = min(Merge(v, Solve(L, a[L]), {}), Merge(a[L], Solve(L, v), {})); } return dp[i][v] = min({Merge(v, Solve(L, a[L]), Solve(R, a[R])), Merge(a[L], Solve(L, v), Solve(R, a[R])), Merge(a[R], Solve(L, a[L]), Solve(R, v)), Merge(a[R], Solve(L, v), Solve(R, a[L]))}); }; vector<int> res = Solve(0, a[0]); for (int i = 0; i < (int) res.size(); i++) { cout << res[i] + 1 << " "; } cout << '\n'; return 0; }
#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...