Submission #335696

#TimeUsernameProblemLanguageResultExecution timeMemory
335696couplefireAncient Books (IOI17_books)C++17
0 / 100
1 ms512 KiB
#include "books.h"
#include <bits/stdc++.h>
using namespace std;

long long minimum_walk(vector<int> p, int s) {
    int n = p.size();
    vector<bool> visited(n, 0);
    vector<vector<int>> cycles;
    long long ans = 0;
    for(int i = 0; i<n; i++) ans += abs(p[i]-i);
    for(int i = 0; i<n; i++){
        if(visited[i]) continue;
        cycles.push_back({});
        int j = i;
        while(!visited[j]){
            visited[j] = 1;
            cycles.back().push_back(j);
            j = p[j];
        }
    }
    int leftMost = 0;
    for(auto x : cycles){
        if(x.size() == 1) continue;
        int mi = n;
        for(auto y : x) mi = min(mi, y);
        leftMost = max(leftMost, mi);
    }
	return ans+2ll*leftMost;
}
#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...