#HK4969. 「POI2015 R2」快速阅读课程 Speed reading course

「POI2015 R2」快速阅读课程 Speed reading course

题目描述

题目译自 XXII Olimpiada Informatyczna — II etap Kurs szybkiego czytania

Bajtazar 报名了一门快速阅读课程,学会了许多提升观察力的练习。他最爱的练习是在符号序列中寻找特定模式。他用计算机生成一个超长的 0011 序列,方法是选择 n,a,b,pn, a, b, pnnaa 互质),生成序列 c0,c1,,cn1c_0, c_1, \ldots, c_{n-1},其中 ci=0c_i = 0 当且仅当 (ai+b)modn<p(a \cdot i + b) \bmod n < p。接着,他设计一个较短的 mm 个符号序列 w0,w1,,wm1w_0, w_1, \ldots, w_{m-1},目标是尽快找出这个短序列在长序列中的所有出现位置。Bajtazar 请你编写程序,验证他是否找全了这些位置。

输入格式

第一行包含五个整数 n,a,b,p,mn, a, b, p, m $(2 \leq n \leq 10^9, 1 \leq p, a, b, m < n, 1 \leq m \leq 1000000)$,分别表示长序列长度、生成参数、模式序列长度。aann 互质。

第二行包含一个长度为 mm0\texttt{0}1\texttt{1} 序列 w0,w1,,wm1w_0, w_1, \ldots, w_{m-1}

输出格式

输出一行,一个整数,表示序列 w0,w1,,wm1w_0, w_1, \ldots, w_{m-1}c0,c1,,cn1c_0, c_1, \ldots, c_{n-1} 中的出现次数。

9 5 6 4 3
101

3

对于 n=9,a=5,b=6,p=4n=9, a=5, b=6, p=4,计算机生成序列如下:

ii 00 11 22 33 44 55 66 77 88
ai+ba i + b 66 1111 1616 2121 2626 3131 3636 4141 4646
(ai+b)modn(a i + b) \bmod n 66 22 77 33 88 44 00 55 11
cic_i 11 00 11 00 11 11 00 11 00

序列 101\texttt{101}101011010\texttt{101011010} 中出现 33 次。

附加样例

  1. 在序列 10010000100100100100\texttt{10010000100100100100} 中寻找 0010\texttt{0010} 的出现次数;
  2. 在序列 0000000100000001000000000000001\texttt{0000000100000001000000000000001} 中寻找 00000\texttt{00000} 的出现次数;
  3. n=1000000000,m=1000000n=1000000000, m=1000000,在序列 000011110\texttt{00}\ldots\texttt{0011}\ldots\texttt{110}4999999994999999990\texttt{0}5000000005000000001\texttt{1}110\texttt{0})中寻找 01111\texttt{011}\ldots\texttt{11}110\texttt{0} 后接全 1\texttt{1})的出现次数。

数据范围与提示

存在以下独立的测试点:

  • 8%8\% 的数据,n1000n \leq 1000
  • 8%8\% 的数据,n1000000n \leq 1000000
  • 66%66\% 的数据,m1000m \leq 1000