CF2065H.Bro Thinks He's Him

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

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 给你一个二进制字符串 ss 和 qq 次查询。每次查询会翻转字符串中的一个字符(即 0\texttt{0} 变为 1\texttt{1},1\texttt{1} 变为 0\texttt{0}),且修改会保留到后续查询。每次查询后,你需要输出所有非空子序列 †^{\text{†}} bb 的 f(b)f(b) 之和模 998 244 353998\,244\,353 的结果。

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

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

输入格式

第一行包含一个整数 tt(1≤t≤1041 \leq t \leq 10^4)——测试用例数量。

每个测试用例的第一行包含一个二进制字符串 ss(1≤∣s∣≤2⋅1051 \leq |s| \leq 2 \cdot 10^5)。

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

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

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

输出格式

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

输入输出样例

  • 输入#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

说明/提示

第一个测试用例在第一次查询后,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,模 998 244 353998\,244\,353 后结果为 1010。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页