#CF2065H. Bro Thinks He's Him

    ID: 6941 传统题 1000ms 256MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>组合数学数据结构分治动态规划数学矩阵CodeforcesCodeforces Round 1003(Div4)Div4HCF2065H2200

Bro Thinks He's Him

题目描述

Skibidus 自认为是"天选之人"!他通过解决这个难题证明了这一点。你也能证明自己吗?

给定一个二进制字符串 ^{\text{∗}} tt,定义 f(t)f(t) 为将 tt 分割成由相同字符组成的连续子串的最小数量。例如,f(00110001)=4f(\texttt{00110001}) = 4,因为 tt 可以被分割为 [00][11][000][1]\texttt{[00][11][000][1]},每个括号内的子串均由相同字符组成。

Skibidus 给你一个二进制字符串 ssqq 次查询。每次查询会翻转字符串中的一个字符(即 0\texttt{0} 变为 1\texttt{1}1\texttt{1} 变为 0\texttt{0}),且修改会保留到后续查询。每次查询后,你需要输出所有非空子序列 ^{\text{†}} bbf(b)f(b) 之和模 998244353998\,244\,353 的结果。

^{\text{∗}} 二进制字符串仅包含字符 0\texttt{0}1\texttt{1}

^{\text{†}} 字符串的子序列是指通过删除原字符串中若干(可能为零)个字符得到的新字符串。

输入格式

第一行包含一个整数 tt1t1041 \leq t \leq 10^4)——测试用例数量。

每个测试用例的第一行包含一个二进制字符串 ss1s21051 \leq |s| \leq 2 \cdot 10^5)。

每个测试用例的第二行包含一个整数 qq1q21051 \leq q \leq 2 \cdot 10^5)——查询次数。

每个测试用例的第三行包含 qq 个整数 v1,v2,,vqv_1, v_2, \ldots, v_q1vis1 \leq v_i \leq |s|),表示第 ii 次查询翻转 svis_{v_i} 处的字符。

保证所有测试用例的 s|s| 之和与 qq 之和均不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,在一行中输出 qq 个整数——每次查询后的答案模 998244353998\,244\,353

样例

3
101
2
1 3
10110
3
1 2 3
101110101
5
7 2 4 4 1
10 7 
61 59 67 
1495 1169 1417 1169 1396

样例说明

第一个测试用例在第一次查询后,ss 变为 001\texttt{001}。计算所有子序列的 ff 值:

  • f(s1)=f(0)=1f(s_1) = f(\texttt{0}) = 1
  • f(s2)=f(0)=1f(s_2) = f(\texttt{0}) = 1
  • f(s3)=f(1)=1f(s_3) = f(\texttt{1}) = 1
  • f(s1s2)=f(00)=1f(s_1 s_2) = f(\texttt{00}) = 1
  • f(s1s3)=f(01)=2f(s_1 s_3) = f(\texttt{01}) = 2
  • f(s2s3)=f(01)=2f(s_2 s_3) = f(\texttt{01}) = 2
  • f(s1s2s3)=f(001)=2f(s_1 s_2 s_3) = f(\texttt{001}) = 2

这些值的总和为 1010,模 998244353998\,244\,353 后结果为 1010

翻译由 DeepSeek R1 完成

来源

Codeforces 2065H,英文题名 Bro Thinks He's Him。