CF2150A Incremental Path
题目描述
[Rymdkraft - Rymdsylt](https://soundcloud.com/rymdkraft/rymdsylt)
⠀
本题不允许使用 Hack。
有一条包含 $10^9$ 个格子的带子,这些格子按 $1$ 到 $10^9$ 编号。每个格子可以是黑色或白色。起初,有 $m$ 个不同的格子 $a_1, a_2, \ldots, a_m$ 是黑色,其余的都是白色。
如果有人当前位于格子 $x$,他可能会被给出以下两种指令之一:
- $\texttt{A}$:跳到下一个格子,即格子 $x+1$;
- $\texttt{B}$:跳到下一个白色格子,即最小的 $y > x$,满足格子 $y$ 是白色。
有一串长度为 $n$ 的命令字符串 $s$,包含 $n$ 个指令。对于每一个 $i$ 从 $1$ 到 $n$,一名"参与者"进行如下操作:
- 从格子 $1$ 出发;
- 按顺序执行 $s$ 的前 $i$ 个命令;
- 将最后到达的格子涂黑(如果本来已经是黑色,则保持不变)。
你需要回答,最终哪些格子是黑色的,并按升序输出这些格子的编号。
输入格式
每个测试点包含多组测试数据。第一行为测试用例数 $t$($1 \le t \le 10^4$)。随后每组测试用例如下:
每个测试用例第一行包含两个整数 $n$ 和 $m$($1 \leq n \leq 10^5$,$1 \leq m \leq 10^5$),分别表示命令数量和初始黑色格子的数量。
第二行是一个长度为 $n$ 的字符串 $s$,由字符 $\texttt{A}$ 和 $\texttt{B}$ 组成,表示命令序列。
第三行包含 $m$ 个正整数 $a_1, a_2, \ldots, a_m$($1 \leq a_1 < a_2 < \ldots < a_m \leq 10^9$),表示初始为黑色的格子的编号。
保证所有测试用例中 $n$ 的总和不超过 $10^5$,$m$ 的总和不超过 $10^5$。
输出格式
对于每个测试用例,输出两行:
- 第一行输出一个整数 $k$,表示最后黑色格子的数量;
- 第二行输出这 $k$ 个黑色格子的编号,升序排列。
说明/提示
在第一个测试用例中,最初黑色格子为 $2$ 和 $5$。
第 $1$ 位参与者:
- 从 $1$ 号格子出发;
- 执行命令 $\texttt{B}$,跳到下一个白色格子($3$);
- 将 $3$ 号格子涂黑。
第 $2$ 位参与者:
- 从 $1$ 号格子出发;
- 执行命令 $\texttt{B}$,跳到下一个白色格子($4$);
- 执行命令 $\texttt{A}$,跳到下一个格子($5$);
- 将 $5$ 号格子涂黑(已经是黑色,保持不变)。
第 $3$ 位参与者:
- 从 $1$ 号格子出发;
- 执行命令 $\texttt{B}$,跳到下一个白色格子($4$);
- 执行命令 $\texttt{A}$,跳到下一个格子($5$);
- 执行命令 $\texttt{B}$,跳到下一个白色格子($6$);
- 将 $6$ 号格子涂黑。
最后黑色格子为 $\{2, 3, 5, 6\}$。
在第二个测试用例中,三位参与者最终分别停在 $2$、$3$、$6$ 号格子。
由 ChatGPT 5 翻译