Caso # | Resultado | Tiempo | Memoria |
---|---|---|---|
#1 |
Correcto
|
0.004 s | 0 KBi |
#2 |
Correcto
|
0.005 s | 0 KBi |
#3 |
Correcto
|
0.004 s | 0 KBi |
#4 |
Correcto
|
0.004 s | 1 KBi |
#5 |
Correcto
|
0.004 s | 1 KBi |
#6 |
Correcto
|
0.305 s | 12 KBi |
#7 |
Correcto
|
0.334 s | 12 KBi |
#8 |
Correcto
|
0.004 s | 1 KBi |
#9 |
Correcto
|
0.004 s | 0 KBi |
#10 |
Correcto
|
0.005 s | 0 KBi |
#11 |
Correcto
|
0.004 s | 0 KBi |
#12 |
Correcto
|
0.045 s | 2 KBi |
#13 |
Correcto
|
0.028 s | 2 KBi |
#14 |
Correcto
|
0.036 s | 1 KBi |
#15 |
Correcto
|
0.029 s | 1 KBi |
#16 |
Correcto
|
0.031 s | 2 KBi |
#17 |
Correcto
|
0.003 s | 2 KBi |
#18 |
Correcto
|
0.004 s | 0 KBi |
#19 |
Correcto
|
0.005 s | 0 KBi |
#20 |
Correcto
|
0.004 s | 0 KBi |
#21 |
Correcto
|
0.307 s | 11 KBi |
#22 |
Correcto
|
0.385 s | 13 KBi |
#23 |
Correcto
|
0.425 s | 11 KBi |
#24 |
Correcto
|
0.325 s | 15 KBi |
#25 |
Correcto
|
0.292 s | 12 KBi |
#include <iostream> #include <unordered_set> #include <unordered_map> #include <map> #include <vector> using namespace std; using Permutation = std::unordered_map<int64_t, int64_t>; using Cycle = std::vector<int64_t>; void cyclePower(Cycle cycle, int64_t exponent, Permutation& outResult) { int64_t rotation = exponent % cycle.size(); Permutation result; unordered_set<int64_t> seen; for (int32_t i = 0; i < cycle.size(); ++i) { int64_t currIdx = i; while (seen.count(currIdx) == 0) { seen.insert(currIdx); auto nextIdx = (currIdx + rotation) % cycle.size(); outResult[cycle[nextIdx]] = cycle[currIdx]; currIdx = nextIdx; } } } int main() { int64_t N, R; cin >> N >> R; cin.ignore(1, '\n'); std::vector<int64_t> input; for (int64_t i = 0; i < N; i++) { int num; cin >> num; input.push_back(num); } std::vector<Cycle> cycles; Cycle cycle; int32_t processed = 0; int64_t curr = 0; unordered_set<int64_t> seen; for(int start = 0; start < N; ++start) { if (seen.count(start) > 0) { continue; } cycle.push_back(start); seen.insert(start); auto curr = input[start]; while (seen.count(curr) == 0) { cycle.push_back(curr); seen.insert(curr); curr = input[curr]; } cycles.push_back(std::move(cycle)); cycle = {}; } Permutation result; int i = 0; for (auto& cycle : cycles) { cyclePower(cycle, R, result); } for (int i = 0; i < N; ++i) { cout << result[i] + 1; if (i < N-1) { cout << " "; } } return 0; }