제출 #40281

#제출 시각아이디문제언어결과실행 시간메모리
40281jackyliuxxAncient Books (IOI17_books)C++14
0 / 100
0 ms2020 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;
        }
    }
	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...