O partiție a unui număr natural n
se definește ca o mulțime ordonată de numere naturale nenule (p
1
, p
2
, … , p
k
)
ce conține cel puțin două elemente, îndeplinind condiția: p
1
+p
2
+...+p
k
=n
.
Să considerăm pentru un număr natural n
toate partițiile luate în ordine lexicografică.
De exemplu, pentru numărul natural n=4
există 7
partiții. Le scriem în ordine lexicografică într-o listă pe care o vom numi în continuare tabel lexicografic.
Nr. ordine | Partiție |
1 | 1 1 1 1 |
2 | 1 1 2 |
3 | 1 2 1 |
4 | 1 3 |
5 | 2 1 1 |
3 | 2 2 |
7 | 3 1 |
Cerința
Cunoscând valoarea numărului natural n
:
- pentru un număr
k
dat, să se tipărească partiția de pe pozițiak
din tabelul lexicografic. - pentru o partiție dată, să se calculeze numărul de ordine a ei din tabelul lexicografic
Date de intrare
Fișierul de intrare partit.in
conține pe prima numărul c
, reprezentând cerința de rezolvat. Dacă c=1
, se va rezolva cerința 1
, iar dacă c=2
, se va rezolva cerința 2
.
Pe linia a doua se găsește valoarea lui n
– numărul pe care trebuie să îl descompunem.
Pe linia a treia, în funcție de valoarea lui c
, putem avea
- dacă
c=1
, pe linia3
se găsește un număr naturalk
, reprezentând un număr de ordine, - dacă
c=2
, pe linia3
se găsesc numere naturale separate prin câte un spațiu, reprezentând o partiție a număruluin
.
Date de ieșire
Fișierul de ieșire partit.out
va avea următorul conținut în funcție de valoarea lui c
:
- dacă
c=1
, pe prima linie se va tipări partiția cu numărulk
în ordine lexicografică, numerele vor fi separate prin câte un spațiu; - dacă
c=2
, pe prima linie se va tipări numărul de ordinek
al partiției citite.
Restricții și precizări
1 < n < 10 000
0 < k < 10
17
(indiferent dacă este cazulc=1
sauc=2
)- pentru teste în valoare de 18 puncte avem
n ≤ 20
- pentru alte teste în valoare de 36 de puncte avem
n < 10 000
șik ≤ 1 000 000
- pentru alte teste în valoare de 18 puncte avem
k ≤ 2 000 000 000
- pentru toate testele din fișierele de intrare există soluție
- în concurs s-au acordat 10 puncte din oficiu. Pe site se acordă 10 puncte pentru exemple.
Exemplul 1
partit.in
1 4 5
partit.out
2 1 1
Exemplul 2
partit.in
2 21 1 2 3 4 5 6
partit.out
375776