CF1936B Pinball

题目描述

有一个长度为 $n$ 的一维网格,第 $i$ 个格子中包含一个字符 $s_i$,该字符要么是 ''。 当在某个格子上放置一个弹珠时,弹珠会按照以下规则移动: - 如果弹珠当前在第 $i$ 个格子且 $s_i$ 是 '',则向右移动一个格子。 - 弹珠移动后,$s_i$ 的字符会反转(即如果 $s_i$ 原本是 '',反之亦然)。 - 当弹珠离开网格(即从左边界或右边界离开)时,弹珠停止移动。 你需要回答 $n$ 个独立的询问。在第 $i$ 个询问中,弹珠会被放在第 $i$ 个格子上。注意,每次都在初始网格上放置弹珠。 对于每个询问,计算弹珠离开网格所需的秒数。可以证明,弹珠总能在有限步内离开网格。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数 $t$($1 \le t \le 10^5$)。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($1 \le n \le 5 \cdot 10^5$)。 第二行包含一个长度为 $n$ 的字符串 $s_1s_2\ldots s_n$,仅由字符 '' 组成。 保证所有测试用例中 $n$ 的总和不超过 $5 \cdot 10^5$。

输出格式

对于每个测试用例,对于每个 $i$($1 \le i \le n$),输出当弹珠初始放在第 $i$ 个格子时的答案。

说明/提示

在第一个测试用例中,$i=1$ 时弹珠的移动如下图所示。弹珠需要 $3$ 秒离开网格。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1936B/9b874ab4c5ee491df87b5d2616ead8d797821647.png) $i=2$ 时弹珠的移动如图所示。弹珠需要 $6$ 秒离开网格。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1936B/b4fdbd3674e32422b13cf88676e6ccbb2eef3a53.png) 由 ChatGPT 4.1 翻译