3294 - Hmmm
Cerința[edit | edit source]
Fie λ o permutare de grad N și K un număr natural nenul. Să se afișeze toate soluțiile ecuației x^K=λ în ordine lexicografică.
Date de intrare[edit | edit source]
Fișierul de intrare hmmm.in conține pe prima linie gradul permutării N și K, iar pe a doua linie se citește permutarea λ.
Date de ieșire[edit | edit source]
Fișierul de ieșire hmmm.out va conține toate soluțiile x ale ecuației în ordine lexicografică, câte una pe linie. Elementele permutărilor se separă printr-un spațiu.
Restricții și precizări[edit | edit source]
- N ≤ 9
- 2 ≤ K ≤ 1.000.000.000
- Întotdeauna există cel puțin o soluție.
- Pentru teste în valoare de 50 de puncte K ≤ 15
Exemplu 1[edit | edit source]
- Intrare
4 2
1 2 3 4
- Iesire
1 2 3 4
1 2 4 3
1 3 2 4
1 4 3 2
2 1 3 4
2 1 4 3
3 2 1 4
3 4 1 2
4 2 3 1
4 3 2 1
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> import itertools
def read_input():
with open("hmmm.in", "r") as file: N, K = map(int, file.readline().strip().split()) lambda_permutation = list(map(int, file.readline().strip().split())) return N, K, lambda_permutation
def write_output(solutions):
with open("hmmm.out", "w") as file: for solution in solutions: file.write(" ".join(map(str, solution)) + "\n")
def apply_permutation(permutation, k):
n = len(permutation) result = list(range(1, n + 1)) for _ in range(k): result = [result[permutation[i] - 1] for i in range(n)] return result
def generate_solutions(N, K, lambda_permutation):
all_permutations = itertools.permutations(range(1, N + 1)) solutions = []
for permutation in all_permutations: if apply_permutation(list(permutation), K) == lambda_permutation: solutions.append(permutation)
solutions.sort() return solutions
def main():
N, K, lambda_permutation = read_input()
# Validări if not (1 <= N <= 9): raise ValueError("N trebuie să fie între 1 și 9") if not (2 <= K <= 1000000000): raise ValueError("K trebuie să fie între 2 și 1.000.000.000")
solutions = generate_solutions(N, K, lambda_permutation) write_output(solutions)
if __name__ == "__main__":
main()
</syntaxhighlight>