CF1363B Subsequence Hate

题目描述

Shubham 有一个二进制字符串 $s$。二进制字符串是仅包含字符 “0” 和 “1” 的字符串。 他可以对字符串进行如下操作任意次: - 选择字符串中的一个下标,并翻转该位置的字符。也就是说,如果该字符是 “0”,则变为 “1”;如果是 “1”,则变为 “0”。 如果一个字符串不包含 “010” 或 “101” 作为子序列,则称其为好字符串。例如,“1001” 包含 “101” 作为子序列,因此不是好字符串;而 “1000” 不包含 “010” 或 “101” 作为子序列,因此是好字符串。 请问他最少需要进行多少次操作,才能使字符串变为好字符串?可以证明,通过这些操作可以将任意字符串变为好字符串。 如果字符串 $a$ 可以通过从字符串 $b$ 中删除若干(可能为零或全部)字符得到,则称 $a$ 是 $b$ 的一个子序列。

输入格式

输入的第一行包含一个整数 $t$,表示测试用例的数量,$1 \le t \le 100$。 接下来的 $t$ 行,每行包含一个二进制字符串 $s$,$1 \le |s| \le 1000$。

输出格式

对于每个字符串,输出使其变为好字符串所需的最小操作次数。

说明/提示

在第 $1$、$2$、$5$、$6$ 个测试用例中,字符串本身已经是好字符串,因此不需要进行任何操作。 对于第 $3$ 个测试用例:“001” 可以通过翻转第一个字符得到,这是将字符串变为好字符串的一种方式。 对于第 $4$ 个测试用例:“000” 可以通过翻转第二个字符得到,这是将字符串变为好字符串的一种方式。 对于第 $7$ 个测试用例:“000000” 可以通过翻转第三和第四个字符得到,这是将字符串变为好字符串的一种方式。 由 ChatGPT 4.1 翻译