Solutia problemei Dupadealuri

Multumim lui Mircea_DonciuDonciu Mircea Mircea_Donciu pentru editorial!

Solutie O(N^3) – 20 de puncte

Pentru orice subsecventa din sir, eliminam acea subsecventa si apoi verificam daca ce ne-a ramas este un palindrom. Complexitate O(N^3).

Solutie O(N^2) – 40 de puncte

Orice palindrom posibil va arata ca in imaginea de mai sus, cu secventele L_1 si L_2 (posibil vide) de lungime egala si simetrice si cu palindromul P. Prin urmare o solutie ar fi sa mergem cu un iterator l de la 0 la n/2 care sa ne dea lungimea L_1 si L_2, verificand ca prefixul rescpectiv sufixul de lungime l sunt simetrice. Pentru fiecare l valid putem gasi toate palindroamele P care se invechineaza cu l in O(N) pentru fiecare l cu hashing sau cu Algoritmul lui Manacher. Complexitate totala O(N^2).

Solutie O(N) – 100 de puncte.

Solutia de O(N) e foarte similara cu cea de O(N^2) numai ca incercand pentru fiecare l sa aflam rezultatul in O(1). Facand mai intai Manacher pe tot sirul putem afla pentru fiecare punct i palindromul maximal din i ($nota:$ la Manacher i nu e neaparat un numar natural datorita palindroamelor de lungime para).
Dupa cum se vede mai jos i-l_i<=L_1 si L_1<=i daca si numai daca va exista un palindrom cu centrul in i care sa se invechineze cu L_1. Dat fiind ca lungimile lui L_1, L_2 care se invechineaza cu un palindrom cu centrul in i, sunt consecutive si stiute (i-l_i, i-l_i+1,  i-1, unde l_i este distanta de la i la capatul palindromului maximal) putem face Mo pentru a afla raspunsul final.

Nota de final: Aveti grija pentru fiecare i la cine faceti suma partiala in functie de care dintre L_1 si L_2 va invechina palindromul cu centrul in i.