CF2276B Replace and Compress

题目描述

给定一个长度为 $n$ 的字符串 $s$,该字符串只包含字符 0 和/或 1。你需要恰好执行一次如下操作,包括两个步骤: 1. 选择下标在 $2$ 到 $n-1$ 之间(包含端点)的至多一个字符,并将其替换为相反的字符:0 变 1,1 变 0。你也可以选择不变化任何字符。字符串的第一个和最后一个字符不能被修改; 2. 将每一段最多的连续相同字符(即“最大块”)缩减为一个字符。 一个块被称为最大块当且仅当它无法向左或向右通过加入相同字符进行扩展。例如,第二步结束后,字符串 100111011 会变成 10101。 请你统计执行上述操作后可能得到的不一样的字符串有多少种。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例数量。 每个测试用例包含一行字符串 $s$($3 \le |s| \le 3 \cdot 10^5$),字符串仅由字符 0 和 1 组成。 输入的附加要求: - 所有测试用例的字符串长度之和不超过 $3 \cdot 10^5$。

输出格式

对于每个测试用例,输出一个整数,表示经过操作后能得到的不同字符串数量。

说明/提示

在第一个测试用例中,你可以选择不修改任何字符,也可以修改第二个字符。修改前可能得到的字符串为 001 和 011。压缩后,这两种情况都变成 01,因此答案为 $1$。 在第五个测试用例中: - 如果不修改任何字符,压缩后得到 10101; - 如果修改第二个字符,得到 110111011,压缩后变成 10101; - 如果修改第五个字符,得到 100101011,压缩后变成 1010101; - 如果修改第七个字符,得到 100111111,压缩后变成 101。 一共可以得到三种不同的字符串:101,10101 和 1010101。 由 ChatGPT 5 翻译