CF1969B.Shifts and Sorting

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Shifts and Sorting

题目描述

我们定义一个字符串 ss 的循环移位为将 s1s2sn1sns_1 s_2 \dots s_{n-1} s_n 变换为 sns1s2sn1s_n s_1 s_2 \dots s_{n-1}。换句话说,就是把最后一个字符 sns_n 放到第一个字符之前,其余字符整体向右移动一位。

现在给你一个二进制字符串 ss(只包含 0011)。

每次操作,你可以选择任意一个子串 slsl+1srs_l s_{l+1} \dots s_r1l<rs1 \le l < r \le |s|),对其进行一次循环移位。该操作的代价等于所选子串的长度 rl+1r - l + 1

你可以进行任意次上述操作。请你求出将 ss 变为非递减有序(即所有 00 都在 11 前面)的最小总代价。

输入格式

第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。

每个测试用例的第一行包含一个二进制字符串 ss2s2×1052 \le |s| \le 2 \times 10^5si{0,1}s_i \in \{0, 1\}),即需要排序的字符串。

输入额外保证:所有测试用例中字符串长度之和不超过 2×1052 \times 10^5

输出格式

对于每个测试用例,输出一个整数,表示将字符串变为有序所需的最小总代价。

说明/提示

在第一个测试用例中,你可以选择整个字符串进行一次循环移位:100110 \rightarrow 01。子串长度为 22,所以代价为 22

在第二个测试用例中,字符串已经有序,无需操作。

在第三个测试用例中,一种最优策略如下:

  1. 选择子串 [1,3][1, 3]110000110011000 \rightarrow 01100
  2. 选择子串 [2,4][2, 4]011000011001100 \rightarrow 00110
  3. 选择子串 [3,5][3, 5]001100001100110 \rightarrow 00011

总代价为 3+3+3=93 + 3 + 3 = 9

由 ChatGPT 4.1 翻译

样例

5
10
0000
11000
101011
01101001
2
0
9
5
11

在线编程 IDE

建议全屏模式获得最佳体验