AT_abc426_d.[ABC426D] Pop and Insert

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

给定一个长度为 NN 只包含 0 和 1 的字符串 SS。

你可以对 SS 任意次(可以为零次)执行以下操作:

  • 删除第一个或最后一个字符,将其翻转(将 0 变成 1,将 1 变成 0),并插入回任意位置。更严格地说,设 r(r(0$) = ‘1‘,`1`,r(‘1‘`1`) = $0,你可以执行以下两种选择之一(其中 SiS_i 表示第 ii 个字符):
    • 任选 i (1≤i≤N)i\ (1\leq i\leq N),将 SS 变为 S2…Si r(S1) Si+1…SNS_2\dots S_i\,r(S_1)\,S_{i+1}\dots S_N。
    • 任选 i (0≤i≤N−1)i\ (0\leq i\leq N-1),将 SS 变为 S1…Si r(SN) Si+1…SN−1S_1\dots S_i\,r(S_N)\,S_{i+1}\dots S_{N-1}。

请计算,最少需要多少次操作才能使 SS 的所有字符都相同。可以证明,总能通过合法操作使 SS 全部变为相同字符。

有 TT 组测试数据,请依次解决。

输入格式

输入按如下格式给出:

TT case1\text{case}_1 case2\text{case}_2 ⋮\vdots caseT\text{case}_T

casei\text{case}_i 表示第 ii 组测试数据,格式如下:

NN SS

输出格式

输出 TT 行,第 ii 行输出第 ii 组测试数据的答案。

输入输出样例

  • 输入#1

    3
    5
    01001
    3
    000
    15
    110010111100101

    输出#1

    4
    0
    16

说明/提示

样例解释 1

对于第一组数据,例如,可以按如下方式通过四次操作将所有字符变为 0。无法用三次或更少次数完成,因此答案为 44。

  • 删除首位字符 0,并将其(翻转为 1 后)插入到第一个和第二个字符之间(删除后 SS 的位置)。此时 SS 变为 11001。
  • 删除首位字符 1,并将其(翻转为 0 后)插入到第二和第三个字符之间。SS 变为 10001。
  • 删除尾部字符 1,并将其(翻转为 0 后)插入到末尾。SS 变为 10000。
  • 删除首位字符 1,并将其(翻转为 0 后)插入到开头。SS 变为 00000。

对于第二组数据,SS 的所有字符一开始就是相同的,因此不需要任何操作。

数据范围

  • 1≤T≤2×1051\leq T\leq 2\times 10^5
  • 2≤N≤5×1052\leq N \leq 5\times 10^5
  • TT 和 NN 为整数。
  • SS 是长度为 NN 只包含 0 和 1 的字符串。
  • 所有测试数据中 NN 的总和不超过 5×1055\times 10^5。

由 ChatGPT 5 翻译

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

首页