Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | pmk.in, pmk.out | Sursă | Finala ONIS 2016 |
Autor | Paul Diac, Stefan Ciobaca | Adăugată de | Paul Diac •diac_paul |
Timp execuţie pe test | 0.05 sec | Limită de memorie | 20480 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
Pmk
Algoritmul KMP este folosit pentru a cauta eficient aparitiile un cuvant intr-un text. In prima faza el calculeaza functia prefix pentru cuvant. Functia prefix se calculeaza pentru orice prefix al cuvantului si are ca rezultat lungimea celui mai lung prefix care este si sufix al prefixului curent. Nu se ia in considerare ca prefix sau sufix sirul intreg (ci doar prefixe si sufixe proprii). Ca si conventie de implementare, rezultatul functiei prefix retinut pe pozitia i este functia pentru prefixul de la prima pozitia pana la pozitia i exclusiv, iar pentru prima pozitie se considera ca funtia returneaza -1. Un exemplu de functie prefix poate fi urmatorul:
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
sir[i] | a | b | b | a | a | b | b | b | b | a |
prefix[i] | -1 | 0 | 0 | 0 | 1 | 1 | 2 | 3 | 0 | 0 |
prefix [6] = prefix("abbaab") = 2 = lungime("ab")
h2. Date de intrare
Fişierul de intrare pmk.in ...
Date de ieşire
În fişierul de ieşire pmk.out ...
Restricţii
- T ≤ 20
- 1 ≤ N ≤ 10000
- Pentru fiecare test va exista cel putin o solutie ce contine doar litere mici ale alfabetului englez.
Exemplu
pmk.in | pmk.out |
---|---|
1 10 -1 0 0 0 1 1 2 3 0 0 | abbaabbbba |
Explicaţie
...