Submission #920953

#TimeUsernameProblemLanguageResultExecution timeMemory
920953siewjhAncient Books (IOI17_books)C++17
0 / 100
0 ms348 KiB
#include "books.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll minimum_walk(vector<int> p, int s) {
	int nums = p.size();
	vector<int> cyc(nums, -1);
	ll ans = 0;
	int mn = s, mx = s;
	for (int i = 0; i < nums; i++)
		if (cyc[i] == -1){
			int curr = i; bool sg = (p[i] == i);
			do{
				ans += abs(curr - p[curr]);
				cyc[curr] = i;
				if (!sg){
					mn = min(mn, curr);
					mx = max(mn, curr);
				}
				curr = p[curr];
			} while (curr != i);
		}
	ll cnt = 0;
	vector<bool> vis(nums, 0);
	for (int i = 0; i < nums; i++)
		if (!vis[cyc[i]]){
			vis[cyc[i]] = 1;
			if (i >= mn && i <= mx) cnt++;
		}
	return ans + (cnt - 1) * 2;
}
#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...