Submission #855480

#TimeUsernameProblemLanguageResultExecution timeMemory
855480tvladm2009Giraffes (JOI22_giraffes)C++17
32 / 100
3934 ms600 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { #ifdef ONPC freopen("input.txt", "r", stdin); #else ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #endif // ONPC int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } if (n <= 13) { function<bool(vector<int>)> isgood = [&](vector<int> perm) { bool ok = true; for (int l = 0; l < n; l++) { int mn = n + 1, mx = 0; for (int r = l; r < n; r++) { mx = max(mx, perm[r]); mn = min(mn, perm[r]); if (mn != perm[l] && mn != perm[r] && mx != perm[l] && mx != perm[r]) { ok = false; } } } return ok; }; int sol = (int) 1e9; vector<bool> vis(n + 1, 0); vector<int> perm; function<void(int)> bkt = [&] (int pos) { if (pos == n + 1) { if (isgood(perm)) { int cost = 0; for (int i = 0; i < n; i++) { cost += (perm[i] != a[i]); } sol = min(sol, cost); } } for (int i = 1; i <= n; i++) { if (!vis[i]) { vis[i] = 1; perm.push_back(i); int mn = perm.back(), mx = perm.back(); bool ok = true; for (int l = pos - 1; l >= 0; l--) { mx = max(mx, perm[l]); mn = min(mn, perm[l]); if (mn != perm[l] && mx != perm[l] && mn != perm.back() && mx != perm.back()) { ok = false; break; } } if (ok) bkt(pos + 1); perm.pop_back(); vis[i] = 0; } } }; bkt(1); cout << sol << "\n"; return 0; } 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...