CF1622D Shuffle
题目描述
给定一个长度为 $n$ 的二进制字符串(即仅包含字符 $0$ 和/或 $1$ 的字符串)$s$。你最多可以对字符串 $s$ 执行一次如下操作:选择一个恰好包含 $k$ 个字符 $1$ 的子串(连续子序列),并对该子串进行任意重排(即可以任意改变该子串内字符的顺序)。
请计算通过最多执行一次上述操作,可以从 $s$ 得到多少个不同的字符串。由于答案可能很大,请输出答案对 $998244353$ 取模后的结果。
输入格式
第一行包含两个整数 $n$ 和 $k$($2 \le n \le 5000$,$0 \le k \le n$)。
第二行包含一个长度为 $n$ 的字符串 $s$,仅由字符 $0$ 和/或 $1$ 组成。
输出格式
输出一个整数,表示通过最多执行一次描述中的操作,可以得到多少个不同的字符串。由于答案可能很大,请输出答案对 $998244353$ 取模后的结果。
说明/提示
在第一个样例中,你可以得到的一些字符串如下:
- 要得到 0110110,你可以选择第 $1$ 个字符到第 $4$ 个字符组成的子串 1100,并将其重排为 0110;
- 要得到 1111000,你可以选择第 $3$ 个字符到第 $7$ 个字符组成的子串 00110,并将其重排为 11000;
- 要得到 1100101,你可以选择第 $5$ 个字符到第 $7$ 个字符组成的子串 110,并将其重排为 101。
在第二个样例中,$k=0$,因此你只能选择仅包含 $0$ 的子串。对其重排不会改变字符串,所以你只能得到 10010 这一种字符串。
由 ChatGPT 4.1 翻译