Submission #335708

#TimeUsernameProblemLanguageResultExecution timeMemory
335708couplefire고대 책들 (IOI17_books)C++17
50 / 100
269 ms77668 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; long long minimum_walk(vector<int> p, int s) { int n = p.size(); vector<bool> visited(n, 0); vector<vector<int>> cycles; long long ans = 0; for(int i = 0; i<n; i++) ans += abs(p[i]-i); for(int i = 0; i<n; i++){ if(visited[p[i]]) continue; cycles.push_back({}); int j = p[i]; while(!visited[j]){ visited[j] = 1; cycles.back().push_back(j); j = p[j]; } } vector<int> del(n+1, 0); vector<int> add(n+1, 0); for(auto x : cycles){ int mi = n, ma = -1; for(auto y : x){ mi = min(mi, y); ma = max(ma, y); } add[mi]++; del[ma+1]++; } int cur = 0; int cnt = 0; for(int i = 0; i<n; i++){ cur -= del[i]; if(cur == 0 && i != 0) cnt++; cur += add[i]; } for(int i = n-1; i>=1 && p[i] == i; i--) cnt--; return ans+2ll*cnt; }
#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...