#707
sumk este un joc de perspicacitate, cu N stagii numerotate de la 1 la N. Un joc se termină cu succes dacă jucătorul a parcurs în ordine, de la 1 la N, toate cele N stagii ale jocului şi în fiecare stagiu a obţinut exact K puncte. Fiecare stagiu are N niveluri, numerotate de asemenea de la 1 la N. Jucătorul are posibilitatea să câştige 0, 1, …, K puncte pe oricare nivel al stagiului curent.
Dacă jucătorul se găseşte în stagiul i pe nivelul j și numărul total de puncte obţinute până în acel moment în acest stagiu este mai mic decât K, el va trece în mod obligatoriu pe nivelul j+1 al stagiului i. Dacă jucătorul primește cel puţin un punct pe nivelul j și astfel punctajul său în stagiul i devine exact K, atunci jucătorul trece în mod automat pe nivelul j al stagiului i+1 sau termină jocul cu succes dacă i=N.
Cunoscând numărul N de stagii ale jocului şi numărul K de puncte care trebuie să fie obţinute în fiecare stagiu, să se determine numărul de posibilităţi modulo 578537 pentru ca jocul să se termine cu succes.
Lot Juniori, Baia Mare, 2013
| Problema | sumk | Operații I/O |
sumk.in/sumk.out
|
|---|---|---|---|
| Limita timp | 0.1 secunde | Limita memorie |
Total: 32 MB
/
Stivă 32 MB
|
| Id soluție | #58124908 | Utilizator | |
| Fișier | sumk.cpp | Dimensiune | 1.13 KB |
| Data încărcării | 15 Mai 2025, 11:08 | Scor/rezultat | Eroare de compilare |
sumk.cpp:1:1: error: expected unqualified-id before string constant "#include<stdio.h>\nusing namespace std;\nint n,k,r[502],z[502],i,j,v;\nlong long s,a=578537;\nvoid calcul(int z1[502], int z2[502], int n)\n{\n int x[502],i,j;\n long long s,t;\n for (j=1;j<=n;j++)\n {\n s=0;\n for (i=1;i<=j;i++)\n {\n t = z1[i];\n t = (t * z2[j - i +1]) % a;\n s = (s + t) % a;\n }\n x[j] = s;\n }\n for (j=1;j<=n;j++)\n {\n z1[j] = x[j];\n }\n}\nint main()\n{\n freopen(\"sumk.in\",\"rt\",stdin);\n freopen(\"sumk.out\",\"wt\",stdout);\n scanf(\"%d%d\",&n,&k);\n //calculez modulo, cu triunghiul Pascal, combinarile C(k+p-2,k-1) pentru p=1,2,...,n\n r[1]=1;\n for (j=1;j<=k;j++)\n {\n for (i=2;i<=n;i++)\n {\n r[i] = (r[i-1] + r[i]) % a;\n }\n }\n v=n;\n z[1]=1;\n while (v!=0)\n {\n if (v%2==1)\n {\n calcul(z,r,n);\n }\n calcul(r,r,n);\n v = v / 2;\n }\n s=0;\n for (i=1;i<=n;i++)\n {\n s = (s + z[i]) % a;\n }\n printf(\"%d\",(int)s);\n fclose(stdout);\n fclose(stdin);\n return 0;\n}" ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema sumk 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ă.