CF1969B.Shifts and Sorting

入门

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

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

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

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

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

输入格式

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

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

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

输出格式

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

输入输出样例

  • 输入#1

    5
    10
    0000
    11000
    101011
    01101001

    输出#1

    2
    0
    9
    5
    11

说明/提示

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

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

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

  1. 选择子串 [1,3][1, 3]:11000→0110011000 \rightarrow 01100;
  2. 选择子串 [2,4][2, 4]:01100→0011001100 \rightarrow 00110;
  3. 选择子串 [3,5][3, 5]:00110→0001100110 \rightarrow 00011。

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

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页