Caso # | Resultado | Tiempo | Memoria |
---|---|---|---|
#1 |
Correcto
|
0.004 s | 20 KBi |
#2 |
Correcto
|
0.004 s | 31 KBi |
#3 |
Correcto
|
0.006 s | 0 KBi |
#4 |
Correcto
|
0.005 s | 31 KBi |
#5 |
Correcto
|
0.007 s | 0 KBi |
#6 |
Correcto
|
0.304 s | 4 KBi |
#7 |
Correcto
|
0.394 s | 4 KBi |
#8 |
Incorrecto
|
0.005 s | 17 KBi |
#9 |
Correcto
|
0.005 s | 11 KBi |
#10 |
Correcto
|
0.003 s | 17 KBi |
#11 |
Correcto
|
0.004 s | 7 KBi |
#12 |
Incorrecto
|
0.037 s | 2 KBi |
#13 |
Incorrecto
|
0.035 s | 2 KBi |
#14 |
Incorrecto
|
0.028 s | 1 KBi |
#15 |
Incorrecto
|
0.031 s | 2 KBi |
#16 |
Incorrecto
|
0.041 s | 1 KBi |
#17 |
Incorrecto
|
0.007 s | 0 KBi |
#18 |
Incorrecto
|
0.005 s | 47 KBi |
#19 |
Correcto
|
0.005 s | 11 KBi |
#20 |
Correcto
|
0.003 s | 18 KBi |
#21 |
Incorrecto
|
0.392 s | 6 KBi |
#22 |
Incorrecto
|
0.38 s | 9 KBi |
#23 |
Incorrecto
|
0.359 s | 5 KBi |
#24 |
Correcto
|
0.437 s | 7 KBi |
#25 |
Incorrecto
|
0.436 s | 7 KBi |
#include <iostream> #include <unordered_set> #include <map> #include <vector> using namespace std; using Permutation = std::vector<int64_t>; // Cycle power might give multiple cycles back std::vector<Permutation> cyclePower(Permutation cycle, int64_t exponent) { int64_t rotation = exponent % cycle.size(); std::vector<Permutation> results; unordered_set<int64_t> seen; for (int32_t i = 0; i < cycle.size(); ++i) { Permutation result; int64_t currIdx = i; while (seen.count(currIdx) == 0) { seen.insert(currIdx); result.push_back(cycle[currIdx]); currIdx = (currIdx + rotation) % cycle.size(); } if (!result.empty()) { results.push_back(std::move(result)); } } return results; } void printPerm(Permutation cycle) { for (auto elem : cycle) { cout << elem << " "; } cout << endl; } 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<Permutation> cycles; Permutation cycle; int32_t processed = 0; int64_t curr = 0; unordered_set<int64_t> seen; while (processed < N) { cycle.push_back(curr); seen.insert(curr); curr = input[curr]; if (seen.count(curr) > 0) { seen.clear(); cycles.push_back(std::move(cycle)); cycle = {}; curr = processed + 1; } processed += 1; } std::vector<int64_t> result; int i = 0; for (auto& cycle : cycles) { auto tmpCycles = cyclePower(cycle, R); for (auto tmpCycle : tmpCycles) { std::map<int64_t, int64_t> invMapping; for (int i = 0; i < tmpCycle.size(); ++i) { invMapping[tmpCycle[(i+1) % tmpCycle.size()]] = tmpCycle[i]; } for (auto pair: invMapping) { cout << pair.second + 1; if (i < N-1) { cout << " "; } i += 1; } } } return 0; }