EduBrick

Сколько коллизий даёт один модуль

1000 мс · 256 МБ · всё или ничего

Даны строка ss, длина kk и параметры полиномиального хеша - основание pp и модуль qq. Хеш куска длины kk, начинающегося в позиции ii, считается как

hi=(sipk−1+si+1pk−2+…+si+k−1) mod q,h_i = \left(s_i p^{k-1} + s_{i+1} p^{k-2} + \ldots + s_{i+k-1}\right) \bmod q,

где буква кодируется своим ASCII-кодом.

Посчитайте количество пар позиций i<ji < j, у которых хеши совпали, а сами куски различны. Это и есть число коллизий.

Формат ввода

В первой строке - строка ss из строчных латинских букв (1≤∣s∣≤30001 \le |s| \le 3000).

Во второй строке - числа kk, pp и qq (1≤k≤∣s∣1 \le k \le |s|, 2≤p<q≤1092 \le p < q \le 10^9).

Формат вывода

Выведите количество пар позиций, у которых хеши совпали, а куски различны.

Примеры

ввод
aaaa
2 31 1000000007
вывод
0
ввод
abab
2 31 1000000007
вывод
0
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.