#include <bits/stdc++.h>
#include "books.h"
#define ll long long
using namespace std;
//#define DEBUGGING
#ifdef DEBUGGING
#include "../debug.h"
#else
#define debug(x...) void(42)
#endif
struct Node
{
int head, tail, size, nxt;
Node(int i) : head(i), tail(i), size(1), nxt(-1) {}
Node() : Node(-1) {}
};
constexpr static int MXN = 1e6;
Node node[MXN];
bitset<MXN> visited;
void merge(int a, int b);
ll minimum_walk(vector<int> p, int s)
{
ll sum = 0;
int n = p.size();
debug("A");
for (int i = 0; i < n; i++)
sum += abs(p[i] - i);
debug("B");
for (int i = 0; i < n; i++)
node[i] = Node(i);
debug("c");
for (int i = 0; i < n; i++)
if (node[i].head != node[p[i]].head)
merge(node[i].head, node[p[i]].head);
for (int i = 0; i < n; i++)
debug(i, node[i].head);
int counter = 0;
for (int i = 0; i < n; i++)
if (node[i].head == i && node[i].size > 1)
counter++;
debug(sum);
debug("D");
int lle = s, lri = s;
for (int i = s; i >= 0; i--)
{
while (counter > 0)
{
for (int j = 0; j < n; j++)
{
int lpos = lle-j;
int rpos = lri+j;
if (lpos >= 0 && !visited[node[lpos].head] && node[node[lpos].head].size > 1)
{
sum += j*2;
lle = lpos;
visited[node[lpos].head] = true;
counter--;
break;
}
if (rpos < n && !visited[node[rpos].head] && node[node[rpos].head].size > 1)
{
sum += j*2;
lri = rpos;
visited[node[rpos].head] = true;
counter--;
break;
}
debug(counter);
}
}
}
return sum;
}
void merge(int a, int b)
{
if (node[a].size < node[b].size) swap(a, b);
node[a].size += node[b].size;
node[node[a].tail].nxt = b;
node[a].tail = node[b].tail;
for (;b!=-1;b=node[b].nxt)
node[b].head = a;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
15956 KB |
Output is correct |
2 |
Correct |
8 ms |
15908 KB |
Output is correct |
3 |
Correct |
7 ms |
15960 KB |
Output is correct |
4 |
Correct |
7 ms |
15956 KB |
Output is correct |
5 |
Correct |
8 ms |
15868 KB |
Output is correct |
6 |
Incorrect |
8 ms |
15872 KB |
3rd lines differ - on the 1st token, expected: '8', found: '10' |
7 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
15956 KB |
Output is correct |
2 |
Correct |
8 ms |
15908 KB |
Output is correct |
3 |
Correct |
7 ms |
15960 KB |
Output is correct |
4 |
Correct |
7 ms |
15956 KB |
Output is correct |
5 |
Correct |
8 ms |
15868 KB |
Output is correct |
6 |
Incorrect |
8 ms |
15872 KB |
3rd lines differ - on the 1st token, expected: '8', found: '10' |
7 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
15956 KB |
Output is correct |
2 |
Correct |
8 ms |
15908 KB |
Output is correct |
3 |
Correct |
7 ms |
15960 KB |
Output is correct |
4 |
Correct |
7 ms |
15956 KB |
Output is correct |
5 |
Correct |
8 ms |
15868 KB |
Output is correct |
6 |
Incorrect |
8 ms |
15872 KB |
3rd lines differ - on the 1st token, expected: '8', found: '10' |
7 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
7 ms |
15956 KB |
3rd lines differ - on the 1st token, expected: '3304', found: '4724' |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
15956 KB |
Output is correct |
2 |
Correct |
8 ms |
15908 KB |
Output is correct |
3 |
Correct |
7 ms |
15960 KB |
Output is correct |
4 |
Correct |
7 ms |
15956 KB |
Output is correct |
5 |
Correct |
8 ms |
15868 KB |
Output is correct |
6 |
Incorrect |
8 ms |
15872 KB |
3rd lines differ - on the 1st token, expected: '8', found: '10' |
7 |
Halted |
0 ms |
0 KB |
- |