Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | brperm.in, brperm.out | Sursă | RMI 2020 Ziua 1 |
Autor | Tamio-Vesa Nakajima | Adăugată de | |
Timp execuţie pe test | 1 sec | Limită de memorie | 256000 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
Brperm
SE DA UN ARBORE...
Poveste şi cerinţă...
Am considerat ca sunt date anumite queryuri in input, daca secventa cutare e sau nu br-palindrom. Desigur, putem schimba formatul asta in varianta originala, in caz ca devine inutila schimbarea.
Queryurile sunt doar pe lantul catre radacina - nu vrem lca-uri si alte nebunii
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).
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 X1 Y1 a b c d. Q reprezinta numarul de query-uri.
Fie Ai al i-lea nod de query, si 2Bi a i-a lungime de query. Fie Ri raspunsul la cel de al i-lea query: 1 daca si numai daca lantul de la Ai in sus de lungime 2Bi este br-palindrom, 0 altfel. Acestea se calculeaza, impreuna cu Xi, dupa formulele:
Xi+1 = (i + Xi + Ri) * a + b mod 1.000.000.007
Yi+1 = (i + Yi + Ri) * c + d mod 1.000.000.007
Ai = Xi mod N
Bi = Xi mod log2(lungimea lantului de la Ai la radacina)
Pentru a determina query-ul Ai+1 dandu-se query-ul Ai si raspunsul R la queryul acesta, se foloseste formula Ai+1 = (Ai + R) * U + V mod N.
Date de ieşire
În fişierul de ieşire brperm.out se afiseaza numarul AQ+1.
Restricţii
- SIGMA = 26
- ... ≤ ... ≤ ...
- 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
Exemplu
brperm.in | brperm.out |
---|---|
This is some text written on multiple lines. | This is another text written on multiple lines. |
Explicaţie
...