Potències de permutacions X39049


Statement
 

pdf   zip

html

Donada una n, una permutació de {0, 1, … n−1} és una seqüència on apareix cadascun dels nombres 0, 1, … n−1 exactament una vegada. Per exemple, si n = 3, les seqüències (1 2 0), (2 0 1) i (0 1 2) són permutacions de {0, 1, 2}.

Donades dues permutacions σ = (σ0, …, σn−1) i τ = (τ0, …, τn−1) de {0, 1, … n−1 }, el seu producte σ ∘ τ es defineix com la permutació ρ = (ρ0, …, ρn−1) tal que ρi = στi. Per exemple, si n = 3, σ = (1 2 0) i τ = (2 0 1), llavors σ ∘ τ = (0 1 2), perquè:

  • τ0 = 2 i σ2 = 0,
  • τ1 = 0 i σ0 = 1, i
  • τ2 = 1 i σ1 = 2.

Feu un programa que, donada una permutació σ i un natural k, calculi la potència de σ elevada a k: σk = σ ∘ … ∘ σk). Per conveni, σ0 = (0, 1, …, n−1).

Entrada

L’entrada inclou diversos casos. Cada cas consisteix en el nombre n (1 ≤ n ≤ 104), seguit de n nombres entre 1 i n que descriuen la permutació σ, seguit del nombre k (0 ≤ k ≤ 109).

Sortida

Escriviu la permutació σk.

Observació

La solució esperada per a aquest problema té cost O(n · logk). Les solucions que tinguin un cost Ω(n · k) podran aconseguir com a molt 3 punts sobre 10.


Podeu afegir unes (poques) línies de comentaris explicant què intenteu fer.


Si us cal, podeu fer servir que el producte de permutacions és associatiu.

Public test cases
  • Input

    3
    1 2 0
    0
    
    3
    1 2 0
    2
    
    4
    0 2 3 1
    1
    
    10
    4 3 7 8 0 5 2 1 6 9
    5
    

    Output

    0 1 2
    2 0 1
    0 2 3 1
    4 7 6 1 0 5 8 2 3 9
    
  • Information
    Author
    Enric Rodríguez
    Language
    Catalan
    Other languages
    English
    Official solutions
    C++
    User solutions
    C++