Submission #422702

#TimeUsernameProblemLanguageResultExecution timeMemory
422702ACmachineSpace Pirate (JOI14_space_pirate)C++17
0 / 100
263 ms524292 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, j, k, l) for(int i = (j); i < (k); i += (l)) #define FORD(i, j, k, l) for(int i = (j); i >= (k); i -= (l)) #define REP(i, n) FOR(i, 0, n, 1) #define REPD(i, n) FORD(i, n, 0, 1) #define pb push_back const int INF = (int)1e9; typedef long long ll; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; ll k; cin >> n >> k; const int mx = 62; vector<vector<int>> nxt(mx, vector<int>(n, -1)); REP(i, n){ cin >> nxt[0][i]; nxt[0][i]--; } FOR(i, 1, mx, 1){ REP(j, n){ nxt[i][j] = nxt[i - 1][nxt[i - 1][j]]; } } vector<vector<int>> dist(n, vector<int>(n, -1)); function<void(int, int, int)> dfs = [&](int v, int d, int s){ dist[s][v] = d; if(dist[s][nxt[0][v]] == -1){ dfs(nxt[0][v], d + 1, s); } }; REP(i, n){ dfs(i, 0, i); } auto go = [&](int v, ll k){ REPD(i, mx - 1){ if((1ll << i) <= k){ v = nxt[i][v]; k -= (1ll << i); } } return v; }; vector<int> ans(n, 0); int def = go(0, k); REP(a, n){ REP(b, n){ if(dist[0][a] == -1){ ans[def]++; } else if(a == b){ ans[a]++; } else if(dist[0][b] == -1){ ans[go(b, k - dist[0][a] - 1)]++; } else{ if(dist[0][a] < dist[0][b]){ ll kk = k - dist[0][a]; int cycle_size = dist[b][a] + 1; kk %= cycle_size; if(kk == 0) ans[a]++; else{ ans[go(b, kk - 1)]++; } } else{ ll kk = k - dist[0][b]; int cycle_size = dist[b][a] + 1; kk %= cycle_size; ans[go(b, kk)]++; } } } } REP(i, n){ cout << ans[i] << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...