#include <bits/stdc++.h>
template <class T>
using Vec = std::vector<T>;
using ll = long long;
constexpr ll INF = std::numeric_limits<ll>::max();
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
int N;
ll K;
std::cin >> N >> K;
Vec<int> A(N);
for (auto &x: A) {
std::cin >> x;
x -= 1;
}
if (N <= 3000) {
Vec<Vec<int>> goes(N);
Vec<Vec<ll>> ord(N, Vec<ll>(N, INF));
for (int u = 0; u < N; ++u) {
goes[u].reserve(N);
ord[u][u] = 0;
goes[u].push_back(u);
while (ord[u][A[goes[u].back()]] == INF) {
const auto v = A[goes[u].back()];
const auto k = (int) goes[u].size();
ord[u][v] = k;
goes[u].push_back(v);
}
}
const auto last = [&](const int u) {
return goes[u].back();
};
const auto connects = [&](const int u) {
return A[last(u)];
};
Vec<ll> loop(N);
for (int i = 0; i < N; ++i) {
loop[i] = ord[i][last(i)] - ord[i][connects(i)] + 1;
}
const auto kth = [&](const int u, const ll k) {
if (k < (int) goes[u].size()) {
return goes[u][k];
}
else {
const auto rem = (k - (int) goes[u].size()) % loop[u];
return goes[u][ord[u][connects(u)] + rem];
}
};
Vec<int> ans(N);
for (int a = 0; a < N; ++a) {
for (int b = 0; b < N; ++b) {
if (ord[0][a] >= K) {
ans[kth(0, K)] += 1;
}
else {
const auto rem = K - ord[0][a] - 1;
if (ord[b][a] >= rem) {
ans[kth(b, rem)] += 1;
}
else {
const auto idx = (rem - ord[b][a] - 1) % (ord[b][a] + 1);
ans[kth(b, idx)] += 1;
}
}
}
}
for (const auto x: ans) {
std::cout << x << '\n';
}
}
else {
Vec<int> belong(N, -1);
Vec<Vec<int>> cycles;
for (int src = 0; src < N; ++src) {
if (belong[src] == -1) {
const auto k = (int) cycles.size();
cycles.push_back({ });
int u = src;
while (belong[u] == -1) {
belong[u] = k;
cycles[k].push_back(u);
u = A[u];
}
}
}
auto& cycle = cycles[0];
const auto size = (int) cycle.size();
Vec<ll> ans(N);
ans[cycle[K % size]] += (ll) (N - size) * N;
for (int i = 0; i < N; ++i) {
if (belong[i] != 0) {
ans[i] += std::min<ll>(size, K);
}
}
for (int i = 0; i < size; ++i) {
if (i <= K) {
ans[cycle[i]] += 1;
}
else {
ans[cycle[K]] += 1;
}
}
for (int len = 2; len <= size; ++len) {
const auto k = K % len;
ans[cycle[k]] += len - k - 1;
ans[cycle[size - len + 1]] += k;
}
for (int len = 2; len <= size; ++len) {
for (int k = K % len; k < size; k += len) {
const ll l = std::max(k, len - 1);
const ll r = std::min(k + len - 1, size - 1);
ans[cycle[k]] += std::min(K - 1, r) - std::max(l, K) + 1;
ans[cycle[K % size]] += std::max(l, K) - l;
ans[cycle[K % size]] += r - std::min(K - 1, r);
}
}
for (const auto x: ans) {
std::cout << x << '\n';
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
444 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
4 |
Correct |
1 ms |
440 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
444 KB |
Output is correct |
7 |
Correct |
1 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
332 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
1 ms |
448 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
444 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
4 |
Correct |
1 ms |
440 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
444 KB |
Output is correct |
7 |
Correct |
1 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
332 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
1 ms |
448 KB |
Output is correct |
15 |
Correct |
288 ms |
83908 KB |
Output is correct |
16 |
Correct |
252 ms |
83268 KB |
Output is correct |
17 |
Correct |
289 ms |
84024 KB |
Output is correct |
18 |
Correct |
1771 ms |
106200 KB |
Output is correct |
19 |
Correct |
1016 ms |
99780 KB |
Output is correct |
20 |
Correct |
979 ms |
101992 KB |
Output is correct |
21 |
Correct |
1682 ms |
98956 KB |
Output is correct |
22 |
Correct |
829 ms |
93464 KB |
Output is correct |
23 |
Correct |
1291 ms |
98228 KB |
Output is correct |
24 |
Correct |
631 ms |
91716 KB |
Output is correct |
25 |
Correct |
257 ms |
83600 KB |
Output is correct |
26 |
Correct |
1633 ms |
106184 KB |
Output is correct |
27 |
Correct |
727 ms |
89628 KB |
Output is correct |
28 |
Correct |
808 ms |
94460 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
22 ms |
3396 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
444 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
4 |
Correct |
1 ms |
440 KB |
Output is correct |
5 |
Correct |
1 ms |
332 KB |
Output is correct |
6 |
Correct |
1 ms |
444 KB |
Output is correct |
7 |
Correct |
1 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
332 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
332 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
1 ms |
448 KB |
Output is correct |
15 |
Correct |
288 ms |
83908 KB |
Output is correct |
16 |
Correct |
252 ms |
83268 KB |
Output is correct |
17 |
Correct |
289 ms |
84024 KB |
Output is correct |
18 |
Correct |
1771 ms |
106200 KB |
Output is correct |
19 |
Correct |
1016 ms |
99780 KB |
Output is correct |
20 |
Correct |
979 ms |
101992 KB |
Output is correct |
21 |
Correct |
1682 ms |
98956 KB |
Output is correct |
22 |
Correct |
829 ms |
93464 KB |
Output is correct |
23 |
Correct |
1291 ms |
98228 KB |
Output is correct |
24 |
Correct |
631 ms |
91716 KB |
Output is correct |
25 |
Correct |
257 ms |
83600 KB |
Output is correct |
26 |
Correct |
1633 ms |
106184 KB |
Output is correct |
27 |
Correct |
727 ms |
89628 KB |
Output is correct |
28 |
Correct |
808 ms |
94460 KB |
Output is correct |
29 |
Incorrect |
22 ms |
3396 KB |
Output isn't correct |
30 |
Halted |
0 ms |
0 KB |
- |