Submission #1030376

#TimeUsernameProblemLanguageResultExecution timeMemory
1030376shiomusubi496Ancient Books (IOI17_books)C++17
12 / 100
5 ms8280 KiB
#include "books.h" #include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define rep2(i, a, b) for (int i = (int)(a); i < (int)(b); ++i) #define rrep(i, n) for (int i = (int)(n) - 1; i >= 0; --i) #define rrep2(i, a, b) for (int i = (int)(b) - 1; i >= (int)(a); --i) #define all(v) begin(v), end(v) #define rall(v) rbegin(v), rend(v) using namespace std; using ll = long long; constexpr ll inf = 1e18; template<class T, class U> bool chmin(T& a, const U& b) { return a > b ? a = b, true : false; } template<class T, class U> bool chmax(T& a, const U& b) { return a < b ? a = b, true : false; } long long minimum_walk(std::vector<int> p, int s) { int n = p.size(); if (is_sorted(all(p))) return 0; ll ans = 0; { while (p.back() == n - 1) { if (s == n - 1) { --s; ans += 2; } p.pop_back(); --n; } reverse(all(p)); rep (i, n) p[i] = n - 1 - p[i]; s = n - 1 - s; while (p.back() == n - 1) { if (s == n - 1) { --s; ans += 2; } p.pop_back(); --n; } reverse(all(p)); rep (i, n) p[i] = n - 1 - p[i]; s = n - 1 - s; } rep (i, n) ans += abs(p[i] - i); vector<int> mns(n), mxs(n); { vector<bool> seen(n); rep (i, n) { if (seen[i]) continue; int j = i; int mx = 0; do { seen[j] = true; chmax(mx, j); j = p[j]; } while (i != j); j = i; do { mns[j] = i; mxs[j] = mx; j = p[j]; } while (i != j); } } vector<vector<ll>> dp(n + 1, vector<ll>(n + 1, inf)); dp[mns[s]][mxs[s]] = 0; rep (len, n) { rep (l, n + 1 - len) { int r = l + len; if (dp[l][r] == inf) continue; if (l != 0) chmin(dp[mns[l - 1]][max(r, mxs[l - 1])], dp[l][r] + 1); if (r != n - 1) chmin(dp[min(l, mns[r + 1])][mxs[r + 1]], dp[l][r] + 1); } } return ans + dp[0][n - 1] * 2; }
#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...