Submission #422711

#TimeUsernameProblemLanguageResultExecution timeMemory
422711ACmachineSpace Pirate (JOI14_space_pirate)C++17
0 / 100
255 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){ int m = __lg(k) + 2; REPD(i, m){ 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){ // neviem sa dostat do zaciatku novej hrany ans[def]++; } else if(dist[b][a] == -1){ // nevytvorim cyklus ans[go(b, k - dist[0][a] - 1)]++; } else if(a == b){ // rovnake ans[a]++; } else{ // vytvorim cyklus; pojdem do a ll kk = k - dist[0][a]; ll cycle_size = 1 + dist[b][a]; kk %= cycle_size; if(kk == 0) ans[a]++; else ans[go(b, kk - 1)]++; } } } 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...