10327: Префікс функція


Відправити розв'язок

Бали: 100 (partial)
Time limit: 0.5s
Memory limit: 64M

Author:
Problem type
Allowed languages
Brain****, C, C++, Java, Pascal, Python, v8js

Заданий непустий рядо \(S\) довжини \(N\) (\(1 \le N \le 10^6\))

Гранью (border) рядка назвемо найдовший суфікс (крім всього рядка) який співпадає з префіксом. Наприклад в рядку abceeabc грань буде abc (її довжина 3) В рядку abacaba грань буде aba (її довжина 3) В рядку abcd грань буде пустою (довжина 0) В рядку aaaaa грань буде aaaa (її довжина 4)

В заданому рядку знайдіть значення грані для кожного префікса заданого рядка

Формат вхідних даних

Рядок \(S\)

Формат вихідних даних

Виведіть через пробіл \(N\) чисел - значення префікс функції для кржної позиції

Приклад вхідних даних

abracadabra

Приклад вихідних даних

0 0 0 1 0 1 0 1 2 3 4

Пояснення

a - грань буде 0
ab - 0
abr - 0
abra - 1 (бо суффікс "a", дорівнює префіксу "a")
abrac - 0
abraca - 1 (бо суффікс "a", дорівнює префіксу "a")
abracad - 0
abracada - 1 (бо суффікс "a", дорівнює префіксу "a")
abracadab - 2 (бо суффікс "ab", дорівнює префіксу "ab")
abracadabr - 3 (бо суффікс "abr", дорівнює префіксу "abr") 
abracadabra - 4 (бо суффікс "abra", дорівнює префіксу "abra")

Коментарі

Ще немає коментарів.