CF2109E Binary String Wowee

题目描述

Mouf 觉得主题太无聊了,所以他决定这道题不使用任何主题。 给定一个长度为 $n$ 的二进制$^{\text{∗}}$字符串 $s$。你需要精确执行 $k$ 次以下操作: - 选择一个下标 $i$($1 \le i \le n$)满足 $s_i = \mathtt{0}$; - 然后翻转$^{\text{†}}$所有 $s_j$($1 \le j \le i$)。 你需要计算执行所有 $k$ 次操作的可能方式数量。 由于答案可能非常大,请输出其对 $998\,244\,353$ 取模的结果。 如果在任何步骤中选择的下标不同,则认为两个操作序列是不同的。 $^{\text{∗}}$ 二进制字符串是指仅由字符 $\mathtt{0}$ 和 $\mathtt{1}$ 组成的字符串。 $^{\text{†}}$ 翻转二进制字符是指将其从 $\mathtt{0}$ 变为 $\mathtt{1}$ 或反之。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数量 $t$($1 \le t \le 100$)。接下来是测试用例描述。 每个测试用例的第一行包含两个整数 $n$ 和 $k$($1 \le k \le n \le 500$)——分别表示二进制字符串 $s$ 的长度和需要执行操作的次数。 第二行包含一个长度为 $n$ 的二进制字符串 $s$,仅由字符 $\mathtt{0}$ 和 $\mathtt{1}$ 组成。 保证所有测试用例的 $n$ 之和不超过 $500$。

输出格式

对于每个测试用例,输出一个整数——表示精确执行 $k$ 次操作的可能方式数量,对 $998\,244\,353$ 取模的结果。

说明/提示

**第一个测试用例解释:** 所有可能的操作序列如下: 1. $\mathtt{\color{red}{0}10} \xrightarrow{i = 1} \mathtt{110}$ 2. $\mathtt{\color{red}{010}} \xrightarrow{i = 3} \mathtt{101}$ **第二个测试用例解释:** 所有可能的操作序列如下: 1. $\mathtt{\color{red}{0}00} \xrightarrow{i = 1} \mathtt{\color{red}{1}00} \xrightarrow{i = 2} \mathtt{010}$ 2. $\mathtt{\color{red}{0}00} \xrightarrow{i = 1} \mathtt{\color{red}{1}00} \xrightarrow{i = 3} \mathtt{011}$ 3. $\mathtt{\color{red}{00}0} \xrightarrow{i = 2} \mathtt{\color{red}{11}0} \xrightarrow{i = 3} \mathtt{001}$ 翻译由 DeepSeek V3 完成