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

    ID: 5759 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>数论不定方程其他二分查找数据结构平衡树线性代数位运算

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

题目描述

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

Bajtazar 报名了一门快速阅读课程,学会了许多提升观察力的练习。他最爱的练习是在符号序列中寻找特定模式。他用计算机生成一个超长的 0 和 1 序列,方法是选择 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 0 1 2 3 4 5 6 7 8
ai+ba i + b 6 11 16 21 26 31 36 41 46
(ai+b)modn(a i + b) \bmod n 2 7 3 8 4 0 5 1
cic_i 1 0 1 0 1 1 0

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

附加样例

  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}(499999999 个 0\texttt{0},500000000 个 1\texttt{1},1 个 0\texttt{0})中寻找 01111\texttt{011}\ldots\texttt{11}(1 个 0\texttt{0} 后接全 1\texttt{1})的出现次数。

数据范围与提示

存在以下独立的测试点:

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