CF1969B.Shifts and Sorting
入门
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
我们定义一个字符串 s 的循环移位为将 s1s2…sn−1sn 变换为 sns1s2…sn−1。换句话说,就是把最后一个字符 sn 放到第一个字符之前,其余字符整体向右移动一位。
现在给你一个二进制字符串 s(只包含 0 和 1)。
每次操作,你可以选择任意一个子串 slsl+1…sr(1≤l<r≤∣s∣),对其进行一次循环移位。该操作的代价等于所选子串的长度 r−l+1。
你可以进行任意次上述操作。请你求出将 s 变为非递减有序(即所有 0 都在 1 前面)的最小总代价。
输入格式
第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。
每个测试用例的第一行包含一个二进制字符串 s(2≤∣s∣≤2×105,si∈{0,1}),即需要排序的字符串。
输入额外保证:所有测试用例中字符串长度之和不超过 2×105。
输出格式
对于每个测试用例,输出一个整数,表示将字符串变为有序所需的最小总代价。
输入输出样例
输入#1
5 10 0000 11000 101011 01101001
输出#1
2 0 9 5 11
说明/提示
在第一个测试用例中,你可以选择整个字符串进行一次循环移位:10→01。子串长度为 2,所以代价为 2。
在第二个测试用例中,字符串已经有序,无需操作。
在第三个测试用例中,一种最优策略如下:
- 选择子串 [1,3]:11000→01100;
- 选择子串 [2,4]:01100→00110;
- 选择子串 [3,5]:00110→00011。
总代价为 3+3+3=9。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?