Submission #81151

#TimeUsernameProblemLanguageResultExecution timeMemory
81151TuhiAncient Books (IOI17_books)C++14
0 / 100
2 ms640 KiB
#include <bits/stdc++.h> using namespace std; const int Nmax = 1e6 + 10; int n, s, l, r, p[Nmax]; bool ordered(vector<int> a) { for(int i = 0; i < n - 1; ++i) { if (a[i] > a[i + 1]) return false; } return true; } int solve_1(vector<int> p, int pos) { int l = 0, r = n - 1, res = 0; while(!ordered(p)) { while(p[r] == r) --r; while(p[l] == l) ++l; for( ; pos < r; ++pos) { if (p[pos + 1] < p[pos]) swap(p[pos + 1], p[pos]); ++res; } if (ordered(p)) break; for( ; pos > l; --pos) { if (p[pos - 1] > p[pos]) swap(p[pos - 1], p[pos]); ++res; } } return res + abs(pos - s); } int solve_2(vector<int> p, int pos) { int l = 0, r = n - 1, res = 0; while(!ordered(p)) { while(p[r] == r) --r; while(p[l] == l) ++l; for( ; pos > l; --pos) { if (p[pos - 1] > p[pos]) swap(p[pos - 1], p[pos]); ++res; } if (ordered(p)) break; for( ; pos < r; ++pos) { if (p[pos + 1] < p[pos]) swap(p[pos + 1], p[pos]); ++res; } } return res + abs(pos - s); } int64_t minimum_walk(vector<int> a, int s) { n = a.size(); int tmp1 = solve_1(a, s), tmp2 = solve_2(a, s); return min(tmp1, tmp2); }
#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...