#iai17a1. 随机序列求逆(Random Sequence Inverse)

随机序列求逆(Random Sequence Inverse)

随机序列求逆(Random Sequence Inverse)

题目描述

对一个正整数 ss 反复执行以下过程 nn 次,会得到一个二进制字符串:

s = floor((a*s+c)/k) mod m
if (s < floor(m/2))
    output 0
else
    output 1

其中 x\lfloor x \rfloor 表示不超过 xx 的最大整数。

给定一个二进制字符串 pp,请问一开始 ss 有多少种不同的取值,可以让输出的字符串恰好等于 pp

(规定 ss 的取值范围:0s<m0 \leq s < m

输入格式

第一行:五个整数 aacckkmmnn。 第二行:nn 个字符,表示给定的二进制字符串 pp

输出格式

单个整数:表示满足条件的 ss 的初值的方案数。

样例输入 #1

7 3 10 10 10
0000000000

样例输出 #1

7

数据范围

  • 对于 50% 的数据:m104m \leq 10^4n104n \leq 10^4
  • 对于 100% 的数据:1n1051 \leq n \leq 10^51m1061 \leq m \leq 10^6
  • 0a<m0 \leq a < m0c<m0 \leq c < m1km1 \leq k \leq m

知识点与难度

本题涉及的知识点从属于 GESP 7级,难度等级:⭐⭐⭐⭐


测试点分布

Subtask 分值 测试点编号 说明
0 10 1~2 样例
1 20 3~8 小规模 m≤10^4
2 15 9~11 Hack
3 30 12~20 中规模
4 25 21~25 大规模