avere

Time limit: 0.1s Memory limit: 16MB Input: avere.in Output: avere.out

Italag a fost toată viaţa pasionat de speculaţii bursiere reuşind să adune o avere considerabilă. Fiind un tip original şi pasionat de matematică a scris un testament inedit. Testamentul conţine două numere naturale: SS reprezentând averea ce trebuie împărţită moştenitorilor şi NN reprezentând alegerea sa pentru împărţirea averii. Italag decide să-şi împartă toată averea, iar sumele pe care le acordă moştenitorilor să fie în ordine strict descrescătoare.

De exemplu dacă averea ar fi 77 unităţi monetare, ar putea fi împărţită astfel:

  • 44 (unităţi primului moştenitor) 33 (unităţi celui de-al doilea), sau
  • 66 (unităţi primului moştenitor) 11 (unitate celui de-al doilea), sau
  • 77 (doar primului moştenitor), sau
  • 55 (unităţi primului moştenitor) 22 (unităţi celui de-al doilea), sau
  • 44 (unităţi primului moştenitor) 22 (unităţi celui de-al doilea) 11 (unitate celui de-al treilea).

Văzând că îi este foarte greu să verifice dacă nu cumva a omis vreo variantă de împărţire, Italag le-a scris în ordine lexicografică. Pentru exemplul de mai sus: 4 2 14 \ 2 \ 1; 4 34 \ 3; 5 25 \ 2; 6 16 \ 1; 77.

A hotărât ca banii să fie distribuiţi conform celei de-a NN-a posibilităţi din ordinea lexicografică.

Cerinţă

Scrieţi un program care pentru numerele SS, NN date să calculeze şi să afişeze numărul total de posibilităţi de împărţire a averii, precum şi modul în care se face această împărţire conform cu a NN–a posibilitate din ordinea lexicografică.

Date de intrare

Fişierul de intrare avere.in conţine o singură linie pe care se află două numere naturale separate printr-un singur spaţiu:

  • primul număr (SS) reprezintă suma totală
  • cel de-al doilea (NN) reprezintă numărul de ordine al poziţiei căutate

Date de ieșire

Fişierul de ieşire avere.out va conţine două linii:

  • pe prima linie va fi afişat numărul total de modalităţi de împărţire a averii;
  • pe cea de-a doua linie va fi afişată a NN-a posibilitate de împărţire a lui SS conform cerinţei în ordine lexicografică. Elementele sale vor fi separate prin câte un spaţiu.

Restricții și precizări

  • 1<S<7011 < S < 701
  • 0<N<0 < N < numărul total de posibilităţi cu suma SS
  • Se acordă punctaj parţial pentru fiecare test: 50%50\% pentru determinarea corectă a numărului de posibilităţi de împărţire a lui SS şi 50%50\% pentru determinarea corectă a posibilităţii NN, din ordinea lexicografică.
  • Posibilităţile de împărţire a averii sunt numerotate începând cu 11.
  • Fie x=(x1,x2,xm)x = (x_1, x_2 \dots, x_m) şi y=(y1,y2,,yp)y = (y_1, y_2, \dots, y_p) două şiruri. Spunem că xx precedă pe yy din punct de vedere lexicografic, dacă există k1k \geq 1, astfel încât xi=yix_i = y_i, pentru orice ii de la 11 la k1k-1 şi xk<ykx_k < y_k. Exemplu: 4 2 14 \ 2 \ 1 precedă secvenţa 4 34 \ 3 deoarece (4=4,2<34=4, 2<3), iar 6 16 \ 1 precedă 77 deoarece 6<76 < 7.

Exemplul 1

avere.in

7 2

avere.out

5
4 3

Exemplul 2

avere.in

12 5

avere.out

15
6 5 1 

Exemplul 3

avere.in

700 912345678912345678

avere.out

962056220379782044
175 68 63 58 54 45 40 36 34 32 20 18 17 14 11 9 3 2 1

Log in or sign up to be able to send submissions!