CFCF2161E.Left is Always Right

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个长度为 nn 的二进制字符串和一个奇数 kk。如果对于该字符串的每一个长度为 kk 的子串,其最左侧的字符出现的次数比其他字符多,则称该二进制字符串是好的。

例如,当 k=3k=3 时,字符串 000101 是好的,因为所有长度为 33 的子串(000、001、010 和 101)中,子串最左侧的字符出现次数都多于另一种字符。相反,1011 不是好字符串,因为子串 011 不满足该性质。

现在给定一个长度为 nn 的模式串,包含字符 0、1 或 ?。请你计算将所有 ? 替换为 0 或 1,使得所得二进制字符串为好字符串的方案数。由于答案可能很大,请对 998244353998\,244\,353 取模后输出。

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 tt1t1031 \le t \le 10^3),表示测试数据的组数。

每组测试数据的第一行包含两个整数 nnkk3kn1053 \le k \le n \le 10^5kk 为奇数)。第二行包含 nn 个字符 0、1 或 ?,组成的模式串。

保证所有测试数据中 nn 的总和不超过 10510^5

输出格式

对于每组测试数据,输出一个整数,表示将所有 ? 替换为 0 或 1,使得所得字符串为好字符串的方案数,对 998244353998\,244\,353 取模后输出。

输入输出样例

  • 输入#1

    3
    5 3
    0??0?
    7 7
    1??1??1
    9 5
    ?????????

    输出#1

    3
    15
    46

说明/提示

在第一个样例中,将模式串变成好字符串的三种方法是 00000、00001 和 00101。

在第二个样例中,16 种可能的方案中只有 1001001 是不合法的。

首页