Anul acesta școala Algocoin a organizat un concurs la care au participat elevi. Pentru fiecare elev cunoaștem punctajul obținut la concurs. Directorul școlii a decis să-i recompenseze pe elevi prin acordarea unui număr de monede virtuale care pot fi folosite pentru a achiziționa produse de la magazinul școlii. Pentru a acorda monedele, directorul a ordonat elevii crescător după punctaj și i-a numerotat de la la . Apoi a asociat fiecărui elev monedele astfel:
- elevul cu cel mai mic punctaj (elevul cu numărul de ordine ) primește punctajul său înmulțit cu monede;
- dacă elevul cu numărul de ordine are același punctaj cu elevul cu numărul de ordine , atunci va primi același număr de monede ca elevul cu numărul de ordine ;
- în caz contrar, va primi punctajul său înmulțit cu monede.
Magazinul virtual al școlii are o politică specială care promovează prietenia, astfel:
- pentru fiecare multiplu al unui număr specificat în magazin există cel puțin un produs cu acel preț (da! magazinul virtual al școlii are o infinitate de produse);
- pentru a cumpăra un produs, un elev trebuie să-și găsească un prieten care să accepte ca ei să pună împreună monedele primite, iar suma totală deținută să fie egală cu prețul produsului cumpărat.
Cerință
Cunoscând numărul de elevi , valorile și , precum și punctajul obținut de fiecare elev la concurs, scrieți un program care să rezolve următoarele cerințe:
- afișează, în ordine crescătoare, numărul de monede primite de fiecare elev;
- determină numărul total de perechi de elevi care s-ar putea forma pentru a putea cumpăra un produs din magazin;
- determină prețul (multiplu de ) al celui mai scump produs pentru care există cel puțin perechi distincte de elevi, astfel încât orice elev să poată apărea în cel mult o pereche, iar suma monedelor celor doi elevi din fiecare pereche să fie strict mai mare decât .
Date de intrare
Fișierul de intrare algocoin.in conține pe prima linie numărul natural , reprezentând cerința care trebuie rezolvată (, sau ). Pe a doua linie se află numerele naturale , , , cu semnificația din enunț. Pe a treia linie se află numere naturale reprezentând punctajele obținute de cei elevi. Valorile scrise pe aceeași linie sunt separate prin câte un spațiu.
Date de ieșire
Fișierul de ieșire algocoin.out conține o singură linie pe care se află:
- dacă : numere naturale, separate prin câte un spațiu, reprezentând numărul de monede primite de fiecare elev, în ordine crescătoare;
- dacă sau : un număr natural reprezentând răspunsul la cerința .
Restricții și precizări
- ;
- punctajul oricărui elev ;
- ;
- .
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 30 | |
| 2 | 30 | , |
| 3 | 19 | , fără restricții suplimentare |
| 4 | 9 | , |
| 5 | 12 | , fără restricții suplimentare |
Exemplul 1
algocoin.in
1
7 1 1
6 5 6 7 8 8 3
algocoin.out
3 10 18 18 35 48 48
Explicație
Punctajele în ordine crescătoare sunt: .
Sumele primite vor fi: , , , , , , .
Exemplul 2
algocoin.in
2
7 9 1
6 5 6 7 8 8 1
algocoin.out
3
Explicație
Trebuie să determinăm numărul de perechi de elevi care se pot forma pentru care suma monedelor primite de cei doi să fie multiplu de .
Sumele primite de elevi sunt: .
Se pot forma trei perechi:
- cei doi elevi care au câte monede;
- elevul care are monede și cel care are de monede;
- elevul care are o monedă și cel care are de monede.
Exemplul 3
algocoin.in
3
7 5 2
6 5 6 7 8 8 3
algocoin.out
65
Explicație
Cel mai mare multiplu al lui pentru care putem obține cel puțin perechi distincte de elevi astfel încât suma monedelor celor doi elevi din fiecare pereche să fie strict mai mare decât , iar fiecare elev să poată apărea în cel mult o pereche, este .
Sumele primite de elevi sunt: .
O posibilitate de a forma două perechi conform condițiilor din enunț este de a alege un elev cu suma și un elev cu suma , respectiv celălalt elev cu suma și elevul cu suma .