Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | nkperm.in, nkperm.out | Sursă | preONI 2008 Runda 1 |
Autor | Mircea Bogdan Pasoi | Adăugată de | |
Timp execuţie pe test | 0.05 sec | Limită de memorie | 20480 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
NKPerm
Vom numi o (N,K) permutare un sir de N*K in care fiecare numar intre 1 si N apare de fix K ori, iar elementele adiacente sunt diferite. Fie S sirul tuturor (N,K) permutarilor ordonate lexicografic. Scrieti un program care sa implementeze urmatoarele operatii:
- A. se da o (N,K) permutare valida, sa se determine a cata este in sirul S
- B. se da un numar natural X, sa se determine a X-a permutare din sirul S
Date de intrare
Fisierul de intrare nkperm.in contine pe prima linie numerele naturale N K T. Urmatoarele T linii descriu operatiile, fiecare linie incepand cu un caracter (A sau B) care specifica tipul operatiei.
- Daca este o operatie de tip A vor urma N*K numere care vor reprezenta o (N,K) permutare valida
- Daca este o operatie de tip B va urma un numar natural X
Date de iesire
In fisierul de iesire nkperm.out se vor scrie T linii, fiecare reprezentand rezultatul operatiilor din fisierul de intrare, in ordinea in care au fost date:
- Daca este o operatie de tip A se va afisa un numar natural X
- Daca este o operatie de tip B se vor afisa N*K numere care vor reprezenta a X-a (N,K) permutare valida
Restrictii
- 1 ≤ N ≤ 20
- 1 ≤ K ≤ 5
- 1 ≤ T ≤ 1.000
- Se garanteaza ca pentru operatia A permutarea data va avea numarul de ordine mai mic ca 255
- Se garanteaza ca pentru operatia B numarul X dat va fi mai mic ca 255
Exemplu
nkperm.in | nkperm.out |
---|---|
3 2 2 A 1 3 2 1 2 3 B 11 | 7 2 1 2 3 1 3 |
Explicatie
- 1 2 1 3 2 3
- 1 2 3 1 2 3
- 1 2 3 1 3 2
- 1 2 3 2 1 3
- 1 2 3 2 3 1
- 1 3 1 2 3 2
- 1 3 2 1 2 3
- 1 3 2 1 3 2
- 1 3 2 3 1 2
- 1 3 2 3 2 1
- 2 1 2 3 1 3
- 2 1 3 1 2 3
- 2 1 3 1 3 2
...