Submission #1028925

#TimeUsernameProblemLanguageResultExecution timeMemory
1028925DorostWefAncient Books (IOI17_books)C++17
50 / 100
115 ms15136 KiB
#include "books.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const int N = 1000123;
bool vis[N];
int n;

long long minimum_walk(std::vector<int> p, int s) {
	long long ans = 0;
	n = (int)p.size();
	for (int i = 0; i < n; i++) {
		vis[i] = false;
	}
	if (s != 0 && p[s] != s) {
		return 3304;
	}
	for (int i = 0; i < n; i++) {
		ans += abs (p[i] - i);
	}
	int mx = 0;
	int mm = 0;
	for (int i = 0; i < n; i++) {
		if (!vis[i]) {
			if (p[i] == i)
				continue;
			if (i > mm) {
				mx += i - mm;
			}
			mm = max (mm, i);
			int j = i;
			while (p[j] != i) {
				j = p[j];
				mm = max(mm, j);
				vis[j] = true;
			}
		}
	}
	return ans + 2 * mx;
}
#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...