CF2065H.Bro Thinks He's Him
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Skibidus 自认为是"天选之人"!他通过解决这个难题证明了这一点。你也能证明自己吗?
给定一个二进制字符串 ∗ t,定义 f(t) 为将 t 分割成由相同字符组成的连续子串的最小数量。例如,f(00110001)=4,因为 t 可以被分割为 [00][11][000][1],每个括号内的子串均由相同字符组成。
Skibidus 给你一个二进制字符串 s 和 q 次查询。每次查询会翻转字符串中的一个字符(即 0 变为 1,1 变为 0),且修改会保留到后续查询。每次查询后,你需要输出所有非空子序列 † b 的 f(b) 之和模 998244353 的结果。
∗ 二进制字符串仅包含字符 0 和 1。
† 字符串的子序列是指通过删除原字符串中若干(可能为零)个字符得到的新字符串。
输入格式
第一行包含一个整数 t(1≤t≤104)——测试用例数量。
每个测试用例的第一行包含一个二进制字符串 s(1≤∣s∣≤2⋅105)。
每个测试用例的第二行包含一个整数 q(1≤q≤2⋅105)——查询次数。
每个测试用例的第三行包含 q 个整数 v1,v2,…,vq(1≤vi≤∣s∣),表示第 i 次查询翻转 svi 处的字符。
保证所有测试用例的 ∣s∣ 之和与 q 之和均不超过 2⋅105。
输出格式
对于每个测试用例,在一行中输出 q 个整数——每次查询后的答案模 998244353。
输入输出样例
输入#1
3 101 2 1 3 10110 3 1 2 3 101110101 5 7 2 4 4 1
输出#1
10 7 61 59 67 1495 1169 1417 1169 1396
说明/提示
第一个测试用例在第一次查询后,s 变为 001。计算所有子序列的 f 值:
- f(s1)=f(0)=1
- f(s2)=f(0)=1
- f(s3)=f(1)=1
- f(s1s2)=f(00)=1
- f(s1s3)=f(01)=2
- f(s2s3)=f(01)=2
- f(s1s2s3)=f(001)=2
这些值的总和为 10,模 998244353 后结果为 10。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?