# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
821285 | vjudge1 | 고대 책들 (IOI17_books) | C++14 | 0 ms | 0 KiB |
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<bits/stdc++.h>
#include "books.h"
#define fi first
#define se second
#define ll long long
using namespace std ;
ll ans = 1e18 ;
ll sz ;
vector<ll> now ;
bool check()
{
vector<ll> gr = now ;
sort(gr.begin(), gr.end()) ;
return (now == gr) ;
}
void rec(ll ind, ll cnt, ll sum, ll with)
{
// cout<<ind<<' '<<cnt << ' ' << with << '\n' ;
if(with == -1 && check())
{
ans = min(ans, sum + ind) ;
return ;
}
if(cnt == 16)
return ;
if(with != -1)
{
swap(now[ind], with) ;
rec(ind, cnt + 1, sum, with) ;
swap(now[ind], with) ;
}
else
{
if(now[ind] != -1)
{
swap(now[ind], with) ;
rec(ind, cnt + 1, sum, with) ;
swap(now[ind], with) ;
}
}
if(ind < sz - 1)
rec(ind + 1, cnt + 1, sum + 1, with) ;
if(ind)
rec(ind - 1, cnt + 1, sum + 1, with) ;
}
ll minimum_walk(vector<int> p, int s)
{
sz = p.size() ;
if(sz <= 4)
{
now = p ;
rec(s, 0, 0, -1) ;
}
return ans ;
}
//signed main()
//{
// ll n, s ;
// cin >> n >> s ;
// vector<ll> p(n) ;
// for(ll i = 0 ; i < n ; i++)
// cin >> p[i] ;
// cout << minimum_walk(p, s) ;
// return 0 ;
//}