제출 #132670

#제출 시각아이디문제언어결과실행 시간메모리
132670MoNsTeR_CuBe고대 책들 (IOI17_books)C++17
50 / 100
170 ms8184 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;

long long minimum_walk(std::vector<int> p, int s) {
	#define int long long 
	int l = 0, r = p.size()-1;
	int maxi = -1;
	int ans = -2;
	int n = p.size();
	for(int i = 0; i < (int)p.size(); i++){
		l = i;
		if(p[i] != i){
			break;
		}
	}
	
	for(int i = (int)p.size()-1; i >= 0; i--){
		r = i;
		if(p[i] != i){
			break;
		}
	}
	
	if(l >= r) return 0;
	
	if(s == 0){
		for(int i = l; i <= r; i++){
			ans += abs(p[i]-i);
			maxi = max(maxi, (int)p[i]);
			if(i >= maxi){
				ans += 2;
			}
		}
		
		return ans + 2*l;
	}
	
	vector< bool > visited(n, false);
	
	ans = 0;
	
	for(int i = 0; i < n; i++){
		ans += abs(i-p[i]);
		for(int j = i; j < p[i]; j++){
			visited[j] = true;
		}
	}
	
	for(int i = min(l,(int)s); i <= max((int)s,r); i++){
		ans += (!visited[i])*2;
	}
	return ans;
	#undef int
}
#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...