This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "books.h"
#include <bits/stdc++.h>
using namespace std;
long long minimum_walk(vector<int> p, int s) {
int n = p.size();
vector cycle(n,-1);
int cycle_cnt = 0;
long long ans = 0;
for(int i=0;i<n;i++) {
ans+=abs(p[i]-i);
if(cycle[i]!=-1)continue;
if(p[i]==i)continue;
int curr = i;
do {
cycle[curr]=cycle_cnt;
curr = p[curr];
} while(curr!=i);
cycle_cnt++;
}
if(cycle_cnt==0)return 0;
vector<bool> visited(cycle_cnt);
int curr = 0;
for(int i=0;i<n;i++) {
if(cycle[i]==-1 or visited[cycle[i]])continue;
visited[cycle[i]]=true;
if(++curr==cycle_cnt)return ans+2ll*i;
}
assert(false);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |