Vară, căldură mare. Gigel se joacă în curte udând florile. După ce a terminat, mama lui îi dă o sarcină mai grea. Gigel trebuie să umple un butoi cu apă de rezervă în caz de secetă. Dar nu oricum! El are la dispoziție un șir de găleți de diferite capacități și trebuie să le folosească doar pe acestea pentru umplerea completă a butoiului. O operație constă în umplerea completă a unei o găleți de la sursa de apă și golirea ei în butoi. Desigur, o găleată se poate folosi de mai multe ori. Butoiul are capacitate de litri, Gigel are găleți de capacități litri, numere întregi și distincte și poate folosi o găleată de cel mult ori. Ajutați-l pe Gigel să umple butoiul.
Cerință
Scrieți un program care să rezolve următoarele cerințe:
- Determinați câte modalități de umplere a butoiului există;
- Determinați o modalitate de umplere a butoiului cu număr minim de operații;
- O secvență de exact găleți alăturate se numește norocoasă dacă prin efectuarea operației de același număr de ori pentru fiecare dintre ele, vom putea umple complet butoiul. Determinați secvența norocoasă care permite folosirea celor găleți de un număr minim de ori pentru umplerea completă a butoiului. Secvența norocoasă se va identifica prin poziția primei găleți folosite. Dacă există mai multe soluții se va afișa cea cu poziția minimă. Gălețile din secvența norocoasă se pot folosi de câte ori este nevoie.
Date de intrare
Fișierul de intrare butoi.in
conține pe prima linie un număr natural care poate avea valorile sau și reprezintă numărul cerinței. Linia a doua conține patru valori naturale , separate prin câte un spațiu, reprezentând în ordine capacitatea butoiului, numărul de găleți, numărul maxim de operații care poate fi efectuat cu o găleată, în cazul cerințelor și , iar ultimul număr reprezintă lungimea secvenței norocoase căutate la cerința . Linia a treia conține valori naturale distincte , separate prin câte un spațiu, reprezentând, în ordine, capacitățile celor găleți din șir.
Date de ieșire
Fișierul de ieșire butoi.out
va conține pentru cerința , pe prima linie, un întreg reprezentând numărul de modalități de a umple butoiul. Pentru cerința prima linie va conține valori naturale separate prin câte un spațiu, reprezentând numărul de utilizări a fiecărei găleți iar pentru cerința prima linie va conține un număr natural reprezentând poziția din șir a primei găleți din secvența norocoasă determinată.
Restricții și precizări
- ;
- Pentru cerințele și restricțiile sunt: ; ; și ;
- Pentru cerința restricțiile sunt: ; ; ; și
- Pentru cerința capacitățile ale găleților nu sunt neapărat distincte
- Pentru rezolvarea corectă a primei cerințe se obțin de puncte, pentru rezolvarea corectă a celei de a doua cerințe se obțin de puncte, iar pentru rezolvarea corectă a celei de a treia cerințe se obțin de puncte.
Exemplul 1
butoi.in
1
90 7 1 2
30 56 70 34 60 15 5
butoi.out
3
Explicație
Cerința este . Există modalități de a umple butoiul folosind cel mult o dată fiecare găleată, deoarece . Acestea sunt , și .
Exemplul 2
butoi.in
1
2020 6 5 3
17 42 200 101 51 171
butoi.out
19
Explicație
Cerința este . Există modalități de a umple butoiul.
Exemplul 3
butoi.in
2
2020 6 5 3
17 42 200 101 51 171
butoi.out
0 0 5 3 4 3
Explicație
Cerința este . Numărul minim de operații este . Gălețile au fost folosite astfel: .
Exemplul 4
butoi.in
3
120 7 1 3
90 12 20 8 41 80 11
butoi.out
2
Explicație
Cerința este . Secvența norocoasă de lungime determinată începe la poziția . Prin folosirea de ori a fiecărei găleți din secvență butoiul se umple.