Nu aveti permisiuni pentru a descarca fisierul grader_test2.in

Diferente pentru problema/brperm intre reviziile #19 si #32

Nu exista diferente intre titluri.

Diferente intre continut:

== include(page="template/taskheader" task_id="brperm") ==
'Editorialul':problema/brperm/editorial
Notă: În enunţ, $b{~1~}...b{~K~}$ reprezintă un întreg scris în notaţie binară, unde <tex> b_1 </tex> este cel mai semnificativ bit, iar b{~K~} este cel mai puţin semnificativ bit.
h2. SE DA UN ARBORE...
Vrăjitoarea Roxana, în timp ce zbura pe mătură prin galaxie, a descoperit o nouă planetă (paneta _BR-PERM_) unde toţi locuitorii erau implicaţi într-un dans ciudat. În acest dans, participanţii stau într-o linie, iar apoi se reordonează. Într-un dans la care participa $2^K^$ locuitori, persoana de pe poziţia $b{~1~}...b{~K~}$ se va muta la poziţia $b{~K~}...b{~1~}$ (indexat de la 0).
Roxana a realizat că fiecare persoana de pe _BR-PERM_ poartă îmbrăcaminte din una dintre cele 26 de culori. Aceste culori vor fi reprezentate de litere din alfabetul latin.
_BR-PERM_-ienii consideră speciale şirurile de dansatori unde secvenţa de culori pe care locuitorii le poarta înainte şi după dans sunt la fel. Ei numesc astfel de secvenţe drăguţe. De exemplu, cand $K=2$, avem un şir de $4$ dansatori $0, 1, 2, 3$ care dupa dans va fi ordonat în următorul fel: $0, 2, 1, 3$. Astfel secvenţa de culori $abba$ este drăguţă, dar $abca$ nu este.
_BR-PERM_-ienii o roagă pe Roxana să îi ajute cu această problemă (se pare că vrăjitoarele mereu ajută oamenii să îşi rezolve problemele. Aceştia îi arată un şir de n dansatori şi o roagă să îi răspundă la mai multe întrebari: "Este secvenţa de lungime $2^K^$ care începe la dansatorul $P$ drăguţă?
Consideram permutare $BR$: bit reverse.
Un sir de lungime $2^k$ este $BR-permutare$ daca si numai daca este egal cu el insusi dupa ce se aplica $BR$.
Se da un arbore cu $N$ noduri, indexate de la 0, cu caractere pe muchii. Sirul de caractere $S(i, j)$ este sirul de caractere de lungime $2^j$ format prin concatenarea caracterelor de pe lantul de acea lungime de la $i$ inspre radacina. Functia $brperm(i, j)$ este $1$ daca $S(i, j)$ este $BR-permutare$, iar 0 altfel. In aceasta problema se cere sa calculati eficient functia $brperm$.
h2. Date de intrare
Fişierul de intrare $brperm.in$ contine pe primul rand numarul $N$ de noduri.
Al doilea rand contine cate $N - 1$ numere, iar al $i$-lea este tatal nodului $i$ in arbore (retineti ca nodul $0$ este radacina). Se garanteaza ca tatal unui nod are indicele mai mic ca el.
Al treilea rand contine un sir de $N - 1$ caractere, din care al $i$-lea caracter este caracterul pe muchia dintre $i$ si tatal sau.
Al patrulea rand contine valorile $Q X{~1~} Y{~1~} a b c d$.
Fişierul de intrare "brperm.in" conţine, pe prima linie numărul $N$. Pe linia următoare se află un şir de caractere (litere mici ale alfabetului latin) de lungime $N$. Pe următoarea linie se află numărul de întrebari $Q$, iar pe următoarele $Q$ linii se află câte două numere $P$, $K$.
 
h2. Date de ieşire
În fişierul de ieşire $brperm.out$ se afiseaza numerele $X{~Q+1~} Y{~Q+1~}$. Acestea se definesc dupa recurentele urmatoare:
În fişierul de ieşire "brperm.out" se af răspunsurile la cele Q întrebări ( $1$ dacă secvenţa dată este drăguţă, $0$ dacă nu este), în ordine, câte unul pe linie.
$A{~i~} = X{~i~} mod N$
$B{~i~} = Y{~i~} mod log{~2~}(lungimea lantului de la A{~i~} la radacina)$
$R{~i~} = brperm(A{~i~}, B{~i~})$
$X{~i+1~} = (i + X{~i~} + R{~i~}) * a + b mod 1.000.000.007$
$Y{~i+1~} = (i + Y{~i~} + R{~i~}) * c + d mod 1.000.000.007$
h2. Restricţii
* *SIGMA = 26*
* $1 &le; N &le; 500000$
 
* $1 &le; Q &le; 500000$
* $... &le; ... &le; ...$
* Pentru 20 puncte, $1 &le; N &le; 1000$ şi $1 &le; Q &le; 1000$
* Subtask1 (10 puncte): O(Q * N * logN) && *NU* neaparat linie
* Subtask2 (10 puncte): O(N * logN + Q * N) && *NU* neaparat linie
* Subtask3 (10 puncte): O(N * logN + Q) && linie && SIGMA = 2 && biased random (comisia a ales, pt fiecare test, cate un numar real $p$ intre $0$ si $1$ iar fiecare caracter este 'a' cu probabilitate $p$ si 'b' cu probabilitate $1-p$)
* Subtask4 (30 puncte): O((N + Q) * logN * logN) sau O((N + Q) * sqrt(N + Q) + Q) (nu cunosc solutie, dar cine stie?) - anulat si inghitit de subtaskul urmator in caz ca nu dam queryuri
* Subtask5 (10 puncte): O(N * logN * logN + Q) - acelasi lucru ca subtaskul urmator daca nu dam queryuri
* Subtask6 (10 puncte): O((N + Q) * logN) - in caz ca exista
* Subtask7 (20 puncte): O(N * logN + Q) - in caz ca exista, altfel punctele merg la ultimul subtask existent
* Pentru alte 30 puncte, $1 &le; N &le; 100000$ şi $1 &le; Q &le; 100000$
 
* Pentru alte 20 puncte, s conţine doar caracterele 'a' şi 'b', iar culorile sunt alese aleator independent cu o anumită probabilitate fixată pentru fiecare test.
h2. Exemplu
table(example). |_. brperm.in |_. brperm.out |
| This is some
  text written on
  multiple lines.
| This is another
  text written on
  multiple lines.
| 8
  axxyxxyb
  4
  0 3
  1 1
  1 2
  3 2
| 1
  1
  0
  1
|
h3. Explicaţie
 
...
== include(page="template/taskfooter" task_id="brperm") ==

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.