#1190
Un arheolog a găsit un sipet interesant. După ce l-a deschis cu grijă, a constatat cu surprindere că sipetul conține bănuți de aur. Uitându-se mai atent a mai găsit ceva: un pergament ascuns într-un compartiment secret al sipetului, cu un text scris într-o limbă antică, pe care, din fericire, arheologul o cunoștea. Din text a reieșit că un grup de negustori foarte bogați a vrut să ascundă în mare secret averea breslei lor, formată din monede de aur, deoarece se prevestea un război cumplit. Negustorii știau că există șanse ca această comoară să fie găsită și confiscată de dușmani, deci s-au sfătuit cum e mai bine să procedeze, cum să ascundă comoara. Arheologul a reușit să deducă din text următoarele:
a) Cele N monede, care formau averea breslei, au fost împărțite în maximum trei feluri de grămezi, formate din p1, p2 și p3 bănuți, p1, p2 și p3 fiind numere prime consecutive, p1<p2<p3. Fiecare grămadă a fost pusă în întregime într-un sipet.
b) Este posibil să existe 0 (zero) grămezi formate din p1 sau p2 sau p3 monede, scopul fiind să se obțină o împărțire în care numărul monedelor rămase nedistribuite să fie minim, iar dacă există mai multe posibilități, se alege aceea pentru care numărul de grămezi este mai mare. Dacă există mai multe astfel de soluții, se consideră corectă oricare dintre ele.
c) Monedele care nu au putut fi distribuite conform regulilor stabilite, au fost donate bisericii.
Scrieți un program care determină numărul maxim S de sipete și numărul sipetelor cu p1, p2 respectiv p3 monede, precum și suma donată bisericii.
ONI 2015, Clasa a IX-a
| Problema | Sipet | Operații I/O |
sipet.in/sipet.out
|
|---|---|---|---|
| Limita timp | 1.5 secunde | Limita memorie |
Total: 128 MB
/
Stivă 128 MB
|
| Id soluție | #62904092 | Utilizator | |
| Fișier | sipet.cpp | Dimensiune | 2.26 KB |
| Data încărcării | 05 Februarie 2026, 19:55 | Scor/rezultat | 100 puncte |
sipet.cpp: In function 'int main()': sipet.cpp:51:19: warning: suggest parentheses around assignment used as truth value [-Wparentheses] bun[i]= dp[i].a= dp[i].b= dp[i].c= 0; ^ sipet.cpp:99:19: warning: suggest parentheses around assignment used as truth value [-Wparentheses] bun[i]= dp[i].a= dp[i].b= dp[i].c= 0; ^ sipet.cpp:40:15: warning: unused variable 'j' [-Wunused-variable] int q, i, j, t, n, p1, p2, p3; ^ sipet.cpp:40:18: warning: unused variable 't' [-Wunused-variable] int q, i, j, t, n, p1, p2, p3; ^
| Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
|---|---|---|---|---|---|---|
| 0 | 0.052 secunde | Corect! | 10 | 10 | ||
| 1 | 0.496 secunde | Corect! | 10 | 10 | ||
| 2 | 0.136 secunde | Corect! | 10 | 10 | ||
| 3 | 0.088 secunde | Corect! | 10 | 10 | ||
| 4 | 0.08 secunde | Corect! | 10 | 10 | ||
| 5 | 0.64 secunde | Corect! | 10 | 10 | ||
| 6 | 0.104 secunde | Corect! | 10 | 10 | ||
| 7 | 0.216 secunde | Corect! | 10 | 10 | ||
| 8 | 0.448 secunde | Corect! | 10 | 10 | ||
| 9 | 0.224 secunde | Corect! | 10 | 10 | ||
| Punctaj total | 100 | |||||
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Sipet face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.