Mai intai trebuie sa te autentifici.
Diferente pentru fmi-no-stress-3/solutii intre reviziile #7 si #6
Nu exista diferente intre titluri.
Diferente intre continut:
Precalculând pentru fiecare nod care este poziţia sa din parcurgerea în inordine, putem rezolva problema în timp liniar, folosind o funcţie recursiva. Iniţial ştim ca rădăcina este primul nod din parcurgerea în preordine. O cautam în parcurgerea inordine. Acum fiul stâng al rădăcinii este subarborele cu parcurgerea în inordine intre indicii $1 şi $X-1$, iar fiul drept este subarborele cu parcurgerea în inordine intre indicii $X+1$ şi $N$. Apelam funcţia mai departe şi pentru cei doi fii, în aceasta ordine, pentru a ştii la al câtelea nod suntem din parcurgerea în preordine. == code(cpp) |
void construct (int left,int right,node* &root) { if (left>right) return ;
construct (left,mij-1,root->left); construct (mij+1,right,root->right); }
== h2. 'Muzica':problema/muzica Pentru $100p$ problema se rezolva liniar. Se inserează melodiile lui Vasile într-un hash. Apoi se generează cele M melodii alei lui DJ Random, având grija ca înmulţirea trebuie făcută pe long long, iar operaţia modulo trebuie aplicata o singura data, pentru ca este foarte costisitoare din punct de vedere al timpului, iar pentru $10.000.000$ de operaţii, o constanta de 3 creste timpul. Apoi, pentru o melodie de-a lui DJ Random, se cauta în hash, iar dacă aceasta exista, se incrementează soluţia, iar acea melodie se scoate din hash, pentru a nu fi adunata de mai multe ori la soluţie. Problema se poate rezolva şi folosind o căutare binara, sau folosind set-uri. Aceste implementări ajungeau pana la $70p$.
==