제출 #47189

#제출 시각아이디문제언어결과실행 시간메모리
47189PowerOfNinjaGo고대 책들 (IOI17_books)C++17
22 / 100
219 ms24136 KiB
//Power Of Ninja Go #include <bits/stdc++.h> #ifdef atom #include "grader.cpp" #else #include "books.h" #endif using namespace std; typedef long long ll; typedef pair<int, int> ii; typedef vector<int> vi; typedef vector< ii > vii; #define X first #define Y second #define pb push_back int n; const int maxn = 1e6+5; vector<int> p; int a[maxn], b[maxn]; int dist[maxn]; bool vis[maxn]; int cnt = 0; void dfs(int u) { if(vis[u]) return; vis[u] = true; a[cnt] = min(u, a[cnt]); b[cnt] = max(u, b[cnt]); dist[cnt] += abs(p[u]-u); dfs(p[u]); } long long minimum_walk(std::vector<int> P, int s) { p = P; n = P.size(); for(int i = 0; i< n; i++) a[i] = 1e9; for(int i = 0; i< n; i++) { if(vis[i]) continue; dfs(i); cnt++; } int ed = 0; ll res = 0; for(int i = 0; i< cnt; i++) { if(a[i] == b[i]) continue; //cout << a[i] << " " << b[i] << endl; if(a[i]< ed) { if(b[i]< ed) { res += dist[i]; } else { res += dist[i]; ed = b[i]; } } else { res += 2*(a[i]-ed)+dist[i]; ed = b[i]; } } return res; }
#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...