Submission #72799

#TimeUsernameProblemLanguageResultExecution timeMemory
72799funcsrAncient Books (IOI17_books)C++17
0 / 100
44 ms47696 KiB
#include "books.h" #include <iostream> #include <vector> #include <algorithm> #include <queue> #include <cmath> #include <cassert> using namespace std; #define rep(i,n)for (int i=0; i<(n); i++) #define all(x) (x).begin(), (x).end() #define pb push_back #define _1 first #define _2 second #define INF 1145141919 typedef pair<int, int> P; int N; bool used[1000000]; vector<int> G[1000000]; long long minimum_walk(vector<int> A, int S) { N = A.size(); long long cost = 0; int lmin = 0, rmin = 0; rep(i, N) if (!used[i]) { if (i == A[i]) continue; int x = i; int left = -INF, right = INF; while (!used[x]) { if (x <= S) left = max(left, S-x); else right = min(right, x-S); used[x] = true; cost += abs(A[x]-x); x = A[x]; } if (left == -INF) rmin = max(rmin, right); else if (right == INF) lmin = max(lmin, left); else { G[left].pb(right); } //cout<<left<<"<->"<<right<<"\n"; } assert(S==0); int m = rmin; /* int m = INF; for (int left=N-1; left>=lmin; left--) { m = min(m, left+rmin); for (int r : G[left]) rmin = max(rmin, r); } */ return cost+2LL*m; }
#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...