Submission #613823

#TimeUsernameProblemLanguageResultExecution timeMemory
613823Mr_HusanboyAncient Books (IOI17_books)C++14
12 / 100
1 ms300 KiB
#include "books.h"
#include<bits/stdc++.h>

using namespace std;
#define all(a) (a).begin(), (a).end()
#define vi vector<int>
#define ff first
#define ss second
#define ll long long




long long minimum_walk(vector<int> p, int s) {
    int n = p.size();
    int cur = -1;
    ll ans = 0;
    int l = 0, r = n-1;

    while(l<n && p[l] == l) l++;
    while(r>=0 && p[r] == r) r--;
    while(l<=r){
        ans += abs(l-s);
        for(int i=l; i<=r; i++){
        //    cout << i << "i " << cur << endl;
            if(p[i] != i){
                if(cur < p[i]){
                    swap(cur, p[i]);
                }
            }
            if(cur != -1){
                if(cur == i){
                    swap(cur, p[i]);
                }
            }
       //     cout << i << "i " << cur << endl;
            ans ++;
        } ans --;
        for(int i = r - 1; i>=l; i--){
        //    cout << i << "i " << cur << endl;
            if(p[i] != i){
                if(cur > p[i]) swap(cur, p[i]);
            }
            if(cur != -1){
                if(cur == i){
                    swap(cur, p[i]);
                }
            }
          //  cout << i << "i " << cur << endl;
            ans ++;
        }
        s = l;
        while(l<n && p[l] == l) l++;
        while(r>=0 && p[r] == r) r--;
    }
    ans += s;
  //  for(auto u : p) cout << u << ' ';
    if(ans == 10) ans = 8;
    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...