CFCF2161E.Left is Always Right
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个长度为 n 的二进制字符串和一个奇数 k。如果对于该字符串的每一个长度为 k 的子串,其最左侧的字符出现的次数比其他字符多,则称该二进制字符串是好的。
例如,当 k=3 时,字符串 000101 是好的,因为所有长度为 3 的子串(000、001、010 和 101)中,子串最左侧的字符出现次数都多于另一种字符。相反,1011 不是好字符串,因为子串 011 不满足该性质。
现在给定一个长度为 n 的模式串,包含字符 0、1 或 ?。请你计算将所有 ? 替换为 0 或 1,使得所得二进制字符串为好字符串的方案数。由于答案可能很大,请对 998244353 取模后输出。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 t(1≤t≤103),表示测试数据的组数。
每组测试数据的第一行包含两个整数 n 和 k(3≤k≤n≤105,k 为奇数)。第二行包含 n 个字符 0、1 或 ?,组成的模式串。
保证所有测试数据中 n 的总和不超过 105。
输出格式
对于每组测试数据,输出一个整数,表示将所有 ? 替换为 0 或 1,使得所得字符串为好字符串的方案数,对 998244353 取模后输出。
输入输出样例
输入#1
3 5 3 0??0? 7 7 1??1??1 9 5 ?????????
输出#1
3 15 46
说明/提示
在第一个样例中,将模式串变成好字符串的三种方法是 00000、00001 和 00101。
在第二个样例中,16 种可能的方案中只有 1001001 是不合法的。