Submission #1209117

#TimeUsernameProblemLanguageResultExecution timeMemory
1209117jer033Ancient Books (IOI17_books)C++20
0 / 100
2096 ms320 KiB
#include "books.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;

long long minimum_walk(std::vector<int> p, int s) {
    int n = p.size();
	ll base_cost = 0;
    for (int i=0; i<n; i++)
        base_cost += abs(p[i]-i);
    vector<pii> cycles;
    vector<bool> used(n, 0);
    for (int i=0; i<n; i++)
        if (used[i]==0)
        {
            used[i]=1;
            int mini = i;
            int maxi = i;
            int curr = p[i];
            while (curr!=i)
            {
                used[curr] = 1;
                maxi = max(curr, maxi);
                curr = p[i];
            }
            if (mini!=maxi)
                cycles.push_back({mini, maxi});
        }
    int k = cycles.size();
    ll penalty = 0;
    for (int i=0; i<k; i++)
    {
        if (i==0)
            penalty = cycles[0].first;
        else if (cycles[i].first > cycles[i-1].second)
            penalty += cycles[i].first - cycles[i-1].second;
    }
    return base_cost + 2ll*penalty;
}
#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...