제출 #337666

#제출 시각아이디문제언어결과실행 시간메모리
337666pit4h고대 책들 (IOI17_books)C++14
50 / 100
146 ms34540 KiB
#include "books.h" #include "bits/stdc++.h" using namespace std; using ll = long long; ll solve(vector<int> p, bool force) { int n = p.size(), s = 0, t = n-1; while(!force && p[s]==s) s++; while(p[t]==t) t--; ll ans = 0; vector<int> cnt(n), L(n), R(n); for(int i=s; i<=t; ++i) { if(p[i] > i) cnt[i]++, cnt[p[i]]--; } int delta = 0; for(int i=s; i<=t; ++i) { delta += cnt[i]; L[i] = delta; } cnt = vector<int>(n, 0); for(int i=s; i<=t; ++i) { if(p[i] < i) { cnt[i-1]++; if(p[i]-1>=0) cnt[p[i]-1]--; } } delta = 0; for(int i=t; i>=s; --i) { delta += cnt[i]; R[i] = delta; } for(int i=s; i<t; ++i) { ans += max(2, max(L[i], R[i])*2); } return ans; } ll minimum_walk(vector<int> p, int s) { int n = p.size(); if(s==0 || p[s]!=s) { return solve(p, (s==0)); } ll ans = 1e18+1; vector<int> q = p; for(int i=0; i<n; ++i) { if(i==s) continue; q[i] = s; q[s] = p[i]; ans = min(ans, solve(q, 0)); q[i] = p[i]; q[s] = p[s]; } return 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...