AT_abc359_d [ABC359D] Avoid K Palindrome

题目描述

给定一个由 `A`、`B`、`?` 组成的长度为 $N$ 的字符串 $S$。 给定一个正整数 $K$。如果一个仅由 `A`、`B` 组成的字符串 $T$ 满足以下条件,则称 $T$ 为**好字符串**: - $T$ 的任意长度为 $K$ 的连续子串中,都不存在回文串。 设 $S$ 中包含 $q$ 个 `?`。将这 $q$ 个 `?` 分别替换为 `A` 或 `B`,一共可以得到 $2^q$ 种不同的字符串。请你求出其中有多少种是好字符串。 由于答案可能非常大,请输出答案对 $998244353$ 取模的结果。

输入格式

输入通过标准输入给出,格式如下: > $N$ $K$ $S$

输出格式

请输出答案。

说明/提示

### 限制条件 - $2 \leq K \leq N \leq 1000$ - $K \leq 10$ - $S$ 由 `A`、`B`、`?` 组成 - $S$ 的长度为 $N$ - $N,K$ 均为整数 ### 样例解释 1 给定的字符串中有 $2$ 个 `?`。将这 $2$ 个 `?` 分别替换为 `A` 或 `B`,一共可以得到如下 $4$ 种字符串: - `ABAAABA` - `ABAABBA` - `ABBAABA` - `ABBABBA` 其中,除了第一个 `ABAAABA`,其余 $3$ 个字符串都包含长度为 $4$ 的回文子串 `ABBA`,因此不是好字符串。故输出 `1`。 ### 样例解释 2 请注意,要求输出好字符串的个数对 $998244353$ 取模的结果。 ### 样例解释 3 也有可能无论如何替换 `?` 都无法得到好字符串。 由 ChatGPT 4.1 翻译