제출 #40282

#제출 시각아이디문제언어결과실행 시간메모리
40282jackyliuxx고대 책들 (IOI17_books)C++14
22 / 100
223 ms17652 KiB
#include "books.h"
#include <bits/stdc++.h>
using namespace std;

long long minimum_walk(std::vector<int> p, int s) {
    int ans = 0;
    int n = p.size();
    vector<int> group(n);
    for (int i = 0; i < n; i++) {
        group[i] = i;
    }
    for (int i = 0; i < n; i++) {
        if (group[i] == i) {
            int x = i;
            while (p[x] != i) {
                ans += abs(p[x] - x);
                x = p[x];
                group[x] = i;
            }
            ans += abs(p[x] - x);
        }
    }
    vector<int> end(n, -1);
    for (int i = 0; i < n; i++) {
        end[group[i]] = max(end[group[i]], i);
    }
    int min_group = 0;
    for (int i = 0; i < n; i++) {
        if (min_group == -1) {
            ans += 2;
            min_group = i;
        } else {
            end[min_group] = max(end[min_group], end[group[i]]);
            group[i] = min_group;
        }
        if (i == end[min_group]) {
            min_group = -1;
        }
    }
    for (int i = 0; i < s && p[i] == i; i++) {
        ans -= 2;
    }
    for (int i = n - 1; i > s && p[i] == i; i--) {
        ans -= 2;
    }
	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...