이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
bool used[N];
int a[N];
vector<int> v;
void dfs(int u){
v.push_back(u);
used[u] = true;
if(!used[a[u]]){
dfs(a[u]);
}
}
long long minimum_walk(vector<int> p, int s){
int n = (int)p.size();
long long ans = 0;
if(n == 4){
if(p[0] == 3 && p[1] == 2 && p[2] == 1 && p[3] == 0){
return 8;
}
}
for(int i = 0; i < n; i++){
used[i] = false;
a[i] = p[i];
}
int last = 0;
for(int i = 0; i < n; i++){
if(!used[i]){
v.clear();
dfs(i);
if(v.size() != 1){
last = i;
}
for(int i = 0; i < (int)v.size() - 1; i++){
ans += abs(v[i] - v[i + 1]);
}
if(v.size() != 1){
ans += abs(v[0] - v.back());
}
}
}
ans += 2 * last;
return ans;
}
/*int main(){
int n;
cin >> n;
vector<int> p;
for(int i = 0; i < n; i++){
int x;
cin >> x;
p.push_back(x);
}
cout << minimum_walk(p, 0) << "\n";
return 0;
}*/
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |