Submission #51557

#TimeUsernameProblemLanguageResultExecution timeMemory
51557aomeAncient Books (IOI17_books)C++17
50 / 100
312 ms13628 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; const int N = 1000005; bool visit[N]; long long minimum_walk(vector<int> p, int s) { long long optsum = 1e18; for (int l = 0; l <= s; ++l) { int n = p.size(); int cur = l, lim = l; long long sum = 0; for (int i = 0; i < n; ++i) { sum += abs(p[i] - i); visit[i] = 0; } for (int i = l; i < n; ++i) { if (i != p[i]) lim = i; } while (1) { queue<int> qu; visit[cur] = 1, qu.push(cur); while (qu.size()) { int u = qu.front(); qu.pop(); while (cur < p[u]) { cur++, visit[cur] = 1, qu.push(cur); } } if (cur == lim) break; sum += 2, cur++; } queue<int> qu; for (int i = 0; i < n; ++i) { if (visit[i]) qu.push(i); } while (qu.size()) { int u = qu.front(); qu.pop(); if (!visit[p[u]]) { visit[p[u]] = 1, qu.push(p[u]); } } bool fail = 0; for (int i = 0; i < n; ++i) fail |= !visit[i] && i != p[i]; if (!fail) optsum = min(optsum, sum); } return optsum; }
#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...