Diferente pentru happy-coding-2005-2/solutii intre reviziile #13 si #14

Nu exista diferente intre titluri.

Diferente intre continut:

h2. 'Expresii algebrice':problema/expresii
Vom calcula o matrie $T[i][j]$ reprezentand numarul de arbori de evaluare a sub-expresiei dintre pozitiile $i$ si $j$. Daca sub-expresia dintre aceste pozitii nu este valida (nu este parantezata corect, nu are o structura corespunzatoare de operanzi si operatori etc.), atunci $T[i][j]$ va fi 0. In caz contrar, daca expresia dintre pozitiile $i$ si $j$ este inclusa intre paranteze, atunci $T[i][j]=T[i+1][j-1]$. Daca nu este complet inclusa intr-o pereche de paranteze, atunci exista cel putin un operator care nu este inclus in vreo paranteza. Se cauta intai operatorii $+$ care nu sunt inclusi intre paranteze si pentru fiecare astfel de operator aflat pe o pozitie $k$, $T[i][j]$ se incrementeaza cu valoarea $T[i][k-1]*T[k+1][j]$. Daca nu se gaseste nici un $+$ neinclus intre paranteze, atunci se cauta un '*' si se realizeaza aceleasi operatii.
Vom calcula o matrie $T[i][j]$ reprezentand numarul de arbori de evaluare a sub-expresiei dintre pozitiile $i$ si $j$. Daca sub-expresia dintre aceste pozitii nu este valida (nu este parantezata corect, nu are o structura corespunzatoare de operanzi si operatori etc.), atunci $T[i][j]$ va fi 0. In caz contrar, daca expresia dintre pozitiile $i$ si $j$ este inclusa intre paranteze, atunci $T[i][j]=T[i+1][j-1]$. Daca nu este complet inclusa intr-o pereche de paranteze, atunci exista cel putin un operator care nu este inclus in vreo paranteza. Se cauta intai operatorii ' + ' care nu sunt inclusi intre paranteze si pentru fiecare astfel de operator aflat pe o pozitie $k$, $T[i][j]$ se incrementeaza cu valoarea $T[i][k-1]*T[k+1][j]$. Daca nu se gaseste nici un ' + ' neinclus intre paranteze, atunci se cauta un ' * ' si se realizeaza aceleasi operatii.
h2. 'Calatorie interplanetara':problema/calatorie
h2. 'Resturi':problema/resturi
Vom calcula numarul cerut in mod incremental. La pasul $i$ vom avea calculat numarul $Q$, reprezentand cel mai mic numar care respecta primele $i$ relatii (deci $Q mod p{~j~}=r{~j~}$ pentru orice $j ≤ i$). La pasul $1$, $Q$ este egal chiar cu $r{~1~}$. Avand calculat numarul $Q$ la pasul $i$, va trebui sa determinam numarul $Q'$ la pasul $i+1$ care respecta primele $i+1$ relatii. Acest numar $Q'$ este de forma $Q + x*M$, cu $x ≥ 0$, unde $M$ este cel mai mic multiplu comun al numerelor $p{~1~}$,...,$p{~i~}$ (fiind numere prime, $M$ este chiar produsul lor). Ideea din spatele acestei formule este ca la numarul $Q$ trebuie adunat un multiplu al numarului $M$, pentru ca numarul obtinut $Q'$ sa pastreze aceleasi resturi la impartirile la primele $i$ numere prime date. Avem acum urmatoarea ecuatie: $Q + x*M = r{~i+1~} (mod p{~i+1~})$. Trecand pe $Q$ in partea dreapta, obtinem o ecuatie de forma $A*x = B (mod P)$, care se poate rezolva direct, folosind algoritmul lui Euclid extins, pentru a calcula inversul multiplicativ al lui $A$, relativ la numarul prim $P$. O metoda mai simpla de rezolvare a ecuatiei se bazeaza pe a incerca toate valorile posibile pentru $x$, intre 0 si $p{~i+1~}-1$, care functioneaza deoarece valorile numerelor prime sunt relativ mici (mai mici decat $1000$).
 
Aceasta problema este cunoscuta si ca 'Teorema chineza a restului':http://en.wikipedia.org/wiki/Chinese_remainder_theorem .
 
h2. 'Curse de cai':problema/cai
h2. 'Cercuri':problema/cercuri

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.