Diferente pentru fmi-no-stress-3/solutii intre reviziile #6 si #5

Nu exista diferente intre titluri.

Diferente intre continut:

Problema se poate rezolva folosind o lista dublu inlantuita. Initial adaugam toate cele $C$ carti in lista. La fiecare din cei $N$ pasi trebuie sa stim daca teancul s-a rotit de un numar par sau impar de ori. Daca s-a rotit de un numar impar de ori adaugam noua carte la sfarsitul listei, in caz contrar adaugam la inceputul acesteia. Pentru afisarea solutiei trebuie doar sa afisam toate cele $N+C$ carti din lista, avand grija sa le afisam de la sfarsit la inceput daca teancul a fost rotit de un numar impar de ori.
h2. 'Captcha':problema/captcha
 
h2. 'Ubercool':problema/ubercool
 
Este clar ca exponentul unui număr de forma $a^b^$, unde $a$ este prim şi $b$ este mai mare ca $2$, nu poate depăşi 60, deoarece $2^60^ > 10^18^$, iar baza nu depăşeşte $10^9^$. Atunci putem fixa exponentul, iar pentru un exponent fixat, trebuie sa calculam radical de ordinul respectiv din numărul iniţial. Daca acesta este un întreg, şi este şi prim, răspunsul este afirmativ. Daca am parcurs toţi exponenţii şi nu am găsit un radical întreg şi prim, răspunsul este negativ.
 
Pentru a calcula radical de ordin $N$ dintr-un număr $X$ se putea alege căutarea binara pentru a evita erorile de precizie, sau se putea alege varianta cu $pow (X,1.0/N)$, dar în acest caz trebuia atenţie la precizie.
 
h2. 'Curatenie':problema/curatenie
 
Problema cere sa găsim un arbore binar având la dispoziţie parcurgerile lui inordine şi preordine. Parcurgerea inordine este: $STÂNGA RĂDĂCINA DREAPTA$ iar cea în preordine este $RĂDĂCINA STÂNGA DREAPTA$.
 
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 ;
 
    int mij=pozino[pre[++M]];
    root=new node (ino[mij]);
    construct (left,mij-1,root->left);
    construct (mij+1,right,root->right);
}
 
==
 
h2. 'Captcha':problema/captcha

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.