Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2007-03-25 19:00:34.
Revizia anterioară   Revizia următoare  

Solutii Runda 4

Next

(problema usoara, clasa a 9-a)

Folosind operatii pe numere mari se calculeaza restul lui N la numarul D. Fie R acest rest, se va aduna la numarul N valoarea (D-R) mod D (a mod b reprezinta restul numarului a la impartirea cu b). Numarul astfel obtinut va reprezenta primul numar mai mare sau egal decat N divizibil cu D. O prezentare detaliata a modului in care se pot implementa operatiile cu numere mari necesare se gaseste aici. Complexitatea rezolvarii este O(lg N).

Shop

(problema medie, clasa a 9-a)

La prima vedere, problema este asemanatoare cu problema rucsacului, deci se poate aborda folosind metoda programarii dinamice. Avand in vedere limita mare pentru numarul L o astfel de abordare nu ar fi obtinut punctaj maxim.  Avand in vedere ca toate monezile sunt puteri ale numarului C, exista o rezolvare greedy: se determina cel mai mare tip de moneda CAi disponibil si se foloseste un numar maxim posibil de astfel de monede (minimul dintre L/CAi si Bi). Complexitatea unei astfel de solutii este O(logC L). O solutie care ar fi efectuat scaderi repetate ale cele mai mari monezi ar fi obtinut de asemenea punctaj maxim.

Dezastru

(problema grea, clasa a 9-a)

Bowling

(problema usoara, clasa a 10-a)

In primul rand, pentru a intelege solutia acestei probleme si altor probleme asemanatoare se recomanda citirea urmatoarelor documente despre teoria jocurilor:

Aceasta probleme se regaseste in literatura de specialitate si cu titlul de Kayles. Rezultatul pentru un joc se poate calcula in functie de XOR-ul numerelor Grundy pentru fiecare secventa de popice din sir. Cum N ≤ 50.000 trebuie calculate valorile Grundy pentru fiecare secventa de i popice cu i ≤ 50.000. Acestea se pot calcula in complexitate patratica si se pot pune in sursa ca un sir de constante. O alta solutie se foloseste de observatia ca incepand cu i = 72 sirul de valori se repeta cu perioada 12. Pentru fiecare test din fisier, complexitatea rezolvarii este O(N).

Regiuni

(problema medie, clasa a 10-a, problema usoara, clasele 11-12)

Elimin 2

(problema grea, clasa a 10-a)

Pentru a afla numarul maxim palindrom care este subsir al numarului N vom utiliza metoda programarii dinamice. Fie Li,j lungimea maxima a unui numar palindrom care se gaseste intre pozitiile i si j din numarul N. In momentul in care construim tabloul L consideram ca un numar poate incepe si cu cifra 0. Initial, Li,i = 1, pentru orice i de la 1 la numarul de cifre ale lui N. Vom calcula elementele tabloului L crescator in functie de marimea intervalelor (i,j). Daca consideram ca LEFTc,i este cea mai mica pozitie ≥ i in care apare cifra c in numarul N si RIGHTc,i cea mai mare pozitie ≤ i in care apare c in numarul N, avem urmatoarea relatie de recurenta:
Li,j = maxim(Li+1,j, Li,j-1, Li+1, RIGHT[N[i]][j]-1 + 2, LLEFT[N[j]][i]+1, j-1 + 2), unde prin Ni s-a notat a i-a cifra a numarului N. Relatia de recurenta trateaza urmatoarele cazuri:

  • nu folosim cifra a i-a in solutia optima
  • nu folosim cifra a j-a in solutia optima
  • folosim cifra a i-a ( notata c ) in solutia optima. Pentru ca numarul intre i si j sa fie palindrom, este suficient sa aflam ultima pozitie p inainte de j a cifrei c, solutia optima intre i si j obtinandu-se din solutia optima intre i+1 si p-1 la care adaugam 2 cifre ( cele din capete ).
  • folosim cifra a j-a ( notata c ) in solutia optima. Se trateaza similar.

Daca tablourile LEFT si RIGHT sunt construite inainte de a incepe programarea dinamica ( preprocesare ), putem construi tabloul L in complexitate O(NR_CIF2), unde NR_CIF este numarul de cifre ale lui N. Dupa ce am construit acest tablou, putem reconstitui solutia optima. Sa presupunem ca dorim sa cautam aceasta solutie intre pozitiile i si j si Li,j = X. Vom pune la capetele solutiei cea mai mare cifra c care indeplineste:
LLEFT[c,i]+1,RIGHT[c,j]-1 = X-2.

In final, eliminam 0-urile terminale ( de la ambele capete ale numarului palindrom ) si afisam acest numar. De precizat ca un algoritm de complexitate O(NR_CIF2) si constanta 10 ar fi obtinut in jur de 50 de puncte.

Distincte

(problema medie, clasele 11-12)

Laser

(problema grea, clasele 11-12)

Sponsori

Organizarea finalei preONI este posibila datorita generosilor nostri sponsori: