Олимпиадный тренинг

Задача . G. Лемма о накачке


Задача

Темы: Строки хэши *3000

Вам даны две строки \(s\), \(t\) длины \(n\), \(m\), соответственно. Обе строки состоят из строчных букв латинского алфавита.

Подсчитайте тройки \((x, y, z)\) строк, для которых справедливы следующие условия:

  • \(s = x+y+z\) (символ \(+\) обозначает конкатенацию);
  • \(t = x+\underbrace{ y+\dots+y }_{k \text{ раз}} + z\) для некоторого целого числа \(k\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n < m \leq 10^7\)) — длины строк \(s\) и \(t\), соответственно.

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Третья строка содержит строку \(t\) длины \(m\), состоящую из строчных латинских букв.

Выходные данные

Выведите одно целое число: количество допустимых троек \((x, y, z)\).

Примечание

В первом наборе входных данных единственной подходящей тройкой является \((x, y, z) = (\texttt{"a"}, \texttt{"bc"}, \texttt{"d"})\). Действительно,

  • \(\texttt{"abcd"} = \texttt{"a"} + \texttt{"bc"} + \texttt{"d"}\);
  • \(\texttt{"abcbcbcd"} = \texttt{"a"} + \texttt{"bc"} + \texttt{"bc"} + \texttt{"bc"} + \texttt{"d"}\).

Во втором наборе входных данных существует \(5\) подходящих троек:

  • \((x, y, z) = (\texttt{""}, \texttt{"a"}, \texttt{"aa"})\);
  • \((x, y, z) = (\texttt{""}, \texttt{"aa"}, \texttt{"a"})\);
  • \((x, y, z) = (\texttt{"a"}, \texttt{"a"}, \texttt{"a"})\);
  • \((x, y, z) = (\texttt{"a"}, \texttt{"aa"}, \texttt{""})\);
  • \((x, y, z) = (\texttt{"aa"}, \texttt{"a"}, \texttt{""})\).

В третьем наборе входных данных существует \(8\) подходящих троек:

  • \((x, y, z) = (\texttt{"ab"}, \texttt{"ba"}, \texttt{"babacaab"})\);
  • \((x, y, z) = (\texttt{"abb"}, \texttt{"ab"}, \texttt{"abacaab"})\);
  • \((x, y, z) = (\texttt{"abba"}, \texttt{"ba"}, \texttt{"bacaab"})\);
  • \((x, y, z) = (\texttt{"ab"}, \texttt{"baba"}, \texttt{"bacaab"})\);
  • \((x, y, z) = (\texttt{"abbab"}, \texttt{"ab"}, \texttt{"acaab"})\);
  • \((x, y, z) = (\texttt{"abb"}, \texttt{"abab"}, \texttt{"acaab"})\);
  • \((x, y, z) = (\texttt{"abbaba"}, \texttt{"ba"}, \texttt{"caab"})\);
  • \((x, y, z) = (\texttt{"abba"}, \texttt{"baba"}, \texttt{"caab"})\).

Примеры
Входные данныеВыходные данные
1 4 8
abcd
abcbcbcd
1
2 3 5
aaa
aaaaa
5
3 12 16
abbababacaab
abbababababacaab
8

time 2000 ms
memory 1024 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя