Permutacions i cicles (1) P93873


Statement
 

pdf   zip

Feu un programa que escrigui totes les permutacions de {1,,n}\{1, \ldots, n\} amb exactament kk cicles, on 1kn1 \le k \le n. Per exemple, considereu la permutació (4,3,2,5,1,7,6)(4, 3, 2, 5, 1, 7, 6). A la posició 11 hi ha un 44, a la posició 44 hi ha un 55, i a la posició 55 hi ha un 11. Així doncs, un dels cicles és 14511 \rightarrow 4 \rightarrow 5 \rightarrow 1. Els altres dos cicles són 2322 \rightarrow 3 \rightarrow 2 i 6766 \rightarrow 7 \rightarrow 6. La permutació (3,2,1)(3,2,1) té els dos cicles 1311 \rightarrow 3 \rightarrow 1 i 222 \rightarrow 2, mentre que la permutació (3,4,5,6,7,1,2)(3,4,5,6,7,1,2) només té el cicle 135724611 \rightarrow 3 \rightarrow 5 \rightarrow 7 \rightarrow 2 \rightarrow 4 \rightarrow 6 \rightarrow 1.

Entrada

L’entrada consisteix en nn i kk, amb 1kn1 \le k \le n.

Sortida

Escriviu totes les permutacions de {1,,n}\{1, \ldots, n\} amb kk cicles.

Informació sobre el corrector

Podeu escriure les solucions d’aquest exercici en qualsevol ordre.

Pista

Un programa possible no crea les permutacions consecutivament d’esquerra a dreta, sinó saltant pel vector solució, usant una funció

    void f(int i, int ini, int caselles, int cicles);

on @i@ és la següent posició a omplir, @ini@ és on comença el cicle actual encara no tancat, @caselles@ és el nombre de caselles encara lliures, i @cicles@ és el nombre de cicles que encara falta crear.

Public test cases
  • Input

    3 1
    

    Output

    (2, 3, 1)
    (3, 1, 2)
    
  • Input

    3 2
    

    Output

    (2, 1, 3)
    (1, 3, 2)
    (3, 2, 1)
    
  • Input

    3 3
    

    Output

    (1, 2, 3)
    
  • Information
    Author
    Enric Rodríguez
    Language
    Catalan
    Other languages
    English
    Official solutions
    C++
    User solutions
    C++