CF2092F Andryusha and CCB

题目描述

我们定义一个二进制字符串 $z$ 的**美感值**为满足 $1 \le i < |z|$ 且 $z_i \neq z_{i+1}$ 的索引 $i$ 的数量。 在等待 CCB 的朋友们到来时,Andryusha 烤了一个馅饼,表示为一个长度为 $n$ 的二进制字符串 $s$。为了避免冒犯任何人,他想要将这个字符串分割成 $k$ 个子字符串,使得每个字符属于恰好一个子字符串,且所有子字符串的美感值相同。 Andryusha 不知道会有多少 CCB 的朋友来他家,因此他希望找出满足条件的所有 $k$ 值的数量。然而,他的兄弟 Tristan 认为这个问题的表述过于简单。因此,他要求你为字符串的每个前缀找出这样的 $k$ 值的数量。换句话说,对于每个 $i$(从 $1$ 到 $n$),你需要找出满足可以将前缀 $s_1 s_2 \ldots s_i$ 分割成恰好 $k$ 个具有相同美感值的子字符串的 $k$ 值的数量。

输入格式

每个测试包含多个测试用例。输入数据第一行包含一个整数 $t$ ($1 \le t \le 10^5$) —— 测试用例数量。接下来是测试用例描述。 每个测试用例的第一行包含一个整数 $n$ ($1 \leq n \leq 10^6$) —— 二进制字符串的长度。 第二行包含一个长度为 $n$ 的二进制字符串,仅由字符 0 和 1 组成。 保证所有测试用例的 $n$ 之和不超过 $10^6$。

输出格式

对于每个测试用例,输出一行包含 $n$ 个整数 $c_i$ ($0 \le c_i \le n$) —— 表示对于前缀 $s_1 s_2 \ldots s_i$ 满足条件的 $k$ 值的数量。

说明/提示

第三个测试案例中,满足条件的 $k$ 值为: 1. $i = 1$: $k \in \{1\}$, 2. $i = 2$: $k \in \{1, 2\}$, 3. $i = 3$: $k \in \{1, 2, 3\}$, 4. $i = 4$: $k \in \{1, 3, 4\}$, 5. $i = 5$: $k \in \{1, 2, 4, 5\}$, 6. $i = 6$: $k \in \{1, 5, 6\}$, 7. $i = 7$: $k \in \{1, 5, 6, 7\}$。 翻译由 DeepSeek R1 完成