#include<bits/stdc++.h>
using namespace std;
#include "books.h"
#define int long long
long long minimum_walk(std::vector<signed> p, signed s) {
int N = p.size();
vector<int> nodes (N, -1);
int c = 0;
int sum = 0;
for(int i = 0; i < N; i++){
if(nodes[i] == -1){
if(p[i] == i) continue;
// cout << "new" <<endl;
int j = p[i];
// cout << i << endl;
sum += abs(i - p[i]);
nodes[i] = c;
while(j != i){
sum += abs(j - p[j]); //right?
nodes[j] = c;
// cout << j << endl;
j = p[j];
}
c++;
}
}
// cout << "here" << " " << c << endl;
if(c == 0) return 0;
priority_queue<pair<int,int>> q;
vector<vector<pair<int,int>>> adj (c);
for(int i = 0; i < N; i++){
if(nodes[i] == -1) continue;
while(!q.empty() && q.top().second == nodes[i]){
q.pop();
}
if(!q.empty()){
auto nb = q.top(); q.pop();
adj[nb.second].push_back({i - nb.first, nodes[i]});
adj[nodes[i]].push_back({i - nb.first, nb.second});
}
q.push({i,nodes[i]});
}
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
vector<bool> intree (c);
intree[0] = 1;
for(auto e : adj[0]) pq.push(e);
int tree = 0;
// cout << c << endl;
for(int i = 0; i < c - 1; i++){
while(intree[pq.top().second]) pq.pop();
auto t = pq.top(); pq.pop();
intree[t.second] = 1;
tree += t.first;
for(auto e : adj[t.second]){
pq.push(e);
}
}
// cout << "herer" << endl;
int md = LLONG_MAX;
for(int i = s; i < N; i++){
if(nodes[i] != -1){
md = i - s;
break;
}
}
for(int i = s; i >= 0; i--){
if(nodes[i] != -1){
md = min(md, s - i);
break;
}
}
return md * 2 + sum + tree;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
0 ms |
256 KB |
Output is correct |
3 |
Correct |
0 ms |
256 KB |
Output is correct |
4 |
Correct |
0 ms |
256 KB |
Output is correct |
5 |
Correct |
0 ms |
256 KB |
Output is correct |
6 |
Incorrect |
0 ms |
256 KB |
3rd lines differ - on the 1st token, expected: '8', found: '9' |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
0 ms |
256 KB |
Output is correct |
3 |
Correct |
0 ms |
256 KB |
Output is correct |
4 |
Correct |
0 ms |
256 KB |
Output is correct |
5 |
Correct |
0 ms |
256 KB |
Output is correct |
6 |
Incorrect |
0 ms |
256 KB |
3rd lines differ - on the 1st token, expected: '8', found: '9' |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
0 ms |
256 KB |
Output is correct |
3 |
Correct |
0 ms |
256 KB |
Output is correct |
4 |
Correct |
0 ms |
256 KB |
Output is correct |
5 |
Correct |
0 ms |
256 KB |
Output is correct |
6 |
Incorrect |
0 ms |
256 KB |
3rd lines differ - on the 1st token, expected: '8', found: '9' |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
384 KB |
3rd lines differ - on the 1st token, expected: '3304', found: '3409' |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
0 ms |
256 KB |
Output is correct |
3 |
Correct |
0 ms |
256 KB |
Output is correct |
4 |
Correct |
0 ms |
256 KB |
Output is correct |
5 |
Correct |
0 ms |
256 KB |
Output is correct |
6 |
Incorrect |
0 ms |
256 KB |
3rd lines differ - on the 1st token, expected: '8', found: '9' |
7 |
Halted |
0 ms |
0 KB |
- |