Submission #637521

#TimeUsernameProblemLanguageResultExecution timeMemory
637521boris_mihovAncient Books (IOI17_books)C++17
0 / 100
2058 ms340 KiB
#include "books.h"
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>

typedef long long llong;
const int MAXN = 1000000 + 10;
const int INF  = 1e9;

int a[MAXN];
int b[MAXN];
int res[MAXN];
int perm[MAXN], n, s;

llong check()
{
    for (int i = 1 ; i <= n ; ++i)
    {
        b[i] = a[i];
    }

    perm[n + 1] = s;
    llong ans = 0;

    for (int i = 1 ; i <= n ; ++i)
    {
        std::swap(a[perm[i]], a[perm[i + 1]]);
        ans += abs(perm[i] - perm[i + 1]);
    }

    bool sorted = true;
    for (int i = 1 ; i <= n ; ++i)
    {
        if (a[i] != i) sorted = false;
        a[i] = b[i];
    }

    if (!sorted) return INF;
    return ans;
}

llong minimum_walk(std::vector <int> P, int S) 
{
    n = P.size(); s = S + 1;
    for (int i = 1 ; i <= n ; ++i)
    {
        a[i] = P[i-1] + 1;
    }

    std::iota(perm + 1, perm + 1 + n, 1);
    llong ans = INF;
    do
    {
        ans = std::min(ans, check());
    } while(std::next_permutation(perm + 1, perm + 1 + n));

	return ans;
}
#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...