CF1930I Counting Is Fun
题目描述
给定一个长度为 $n$ 的二进制模式串 $p$。
如果一个长度同为 $n$ 的二进制字符串 $q$ 满足:对于每一个 $i$($1 \leq i \leq n$),都存在区间 $[l, r]$,使得:
- $1 \leq l \leq i \leq r \leq n$,且
- $p_i$ 是字符串 $q_lq_{l+1}\ldots q_r$ 的众数,
则称 $q$ 为一个“好”二进制字符串。
请计算有多少个“好”二进制字符串,答案对 $998\,244\,353$ 取模。
注:
$^\dagger$ 二进制字符串是仅由字符 $\mathtt{0}$ 和 $\mathtt{1}$ 组成的字符串。
$^\ddagger$ 字符 $c$ 是长度为 $m$ 的字符串 $t$ 的众数,如果 $c$ 在 $t$ 中出现的次数不少于 $\lceil \frac{m}{2} \rceil$。例如,$\mathtt{0}$ 是 $\mathtt{010}$ 的众数,$\mathtt{1}$ 不是 $\mathtt{010}$ 的众数,$\mathtt{0}$ 和 $\mathtt{1}$ 都是 $\mathtt{011010}$ 的众数。
输入格式
第一行输入一个整数 $n$($1 \le n \le 10^5$),表示二进制字符串 $p$ 的长度。
第二行输入一个长度为 $n$ 的二进制字符串 $p$,仅包含字符 $0$ 和 $1$。
输出格式
输出“好”二进制字符串的个数,对 $998\,244\,353$ 取模。
说明/提示
在第二个样例中,所有的“好”字符串为:
- $\mathtt{010}$;
- $\mathtt{011}$;
- $\mathtt{101}$;
- $\mathtt{110}$;
- $\mathtt{111}$。
由 ChatGPT 4.1 翻译