CFCF2189D1.Little String (Easy Version)
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的简单版本。不同之处在于,在本版本中,字符串 s 保证不包含字符 ?。
对于由 0 和 1 组成的字符串 w1w2…wn,我们定义 f(w) 为数组 [0,1,…,n−1] 的所有排列 p1,p2,…,pn 的个数,满足对于所有 1≤i≤n,都有:
- 如果 wi=1,则存在 1≤l≤r≤n,使得 mex([pl,pl+1,…,pr])=i;
- 如果 wi=0,则不存在 1≤l≤r≤n,使得 mex([pl,pl+1,…,pr])=i。
已知一个由字符 0 和 1 组成的字符串 s1s2…sn,以及一个正整数 c。注意,在本版本的问题中,字符串 s 不包含 ?。考虑所有可以通过将 s 中的 ? 替换成 0 或 1 得到的字符串 w,找到所有这样的字符串 w 中 f(w) 不被 c 整除的最小值,或者判断是否不存在这样的字符串 w。由于答案可能很大,要求输出对 109+7 取模的结果。
注:mex(最小未出现数)指在一组整数 c1,c2,…,ck 中未出现的最小非负整数 x。
输入格式
每个测试点包含多组测试用例。第一行包含整数 t,表示测试用例数量(1≤t≤104)。接下来是每组测试用例的描述。
每个测试用例的第一行包含两个整数 n 和 c(3≤n≤2⋅105,1≤c≤109)——字符串的长度,以及函数值的限制数。
第二行包含一个长度为 n 的字符串 s,只由字符 0 和 1 组成。
保证所有测试用例中 n 的总和不超过 2⋅105。
输出格式
对于每个测试用例,如果存在某个由 s 替换 ? 得到的字符串 w,使得 f(w) 不被 c 整除,则输出所有这些 w 中 f(w) 的最小值。答案对 109+7 取模。如果不存在这样的 w,则输出 −1。
输入输出样例
输入#1
9 3 3 001 3 1 111 4 100 1001 6 100 111001 6 100 111101 5 8 10001 4 100 1110 21 123456789 111000111000111000111 3 4 101
输出#1
-1 -1 4 96 64 12 -1 336892528 2
说明/提示
在第二个测试用例中,不存在合适的字符串 w,因为 f(w) 总是能被 1 整除。
在第三个测试用例中,只能取 w=s,此时 f(w)=4,有恰好 4 个符合条件的排列:
- p=[0,2,3,1];
- p=[0,3,2,1];
- p=[1,2,3,0];
- p=[1,3,2,0]。
在第六个测试用例中,可以取 w=10001,此时 f(w)=12。其中有一种符合条件的排列为 [0,4,3,2,1],而排列 [0,1,2,3,4] 则不符合要求。可以证明 12 是所有不能被 8 整除的 f(w) 最小值。