AT_abc426_d.[ABC426D] Pop and Insert
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个长度为 N 只包含 0 和 1 的字符串 S。
你可以对 S 任意次(可以为零次)执行以下操作:
- 删除第一个或最后一个字符,将其翻转(将
0变成1,将1变成0),并插入回任意位置。更严格地说,设 r(0$) = ‘1‘,r(‘1‘) = $0,你可以执行以下两种选择之一(其中 Si 表示第 i 个字符):- 任选 i (1≤i≤N),将 S 变为 S2…Sir(S1)Si+1…SN。
- 任选 i (0≤i≤N−1),将 S 变为 S1…Sir(SN)Si+1…SN−1。
请计算,最少需要多少次操作才能使 S 的所有字符都相同。可以证明,总能通过合法操作使 S 全部变为相同字符。
有 T 组测试数据,请依次解决。
输入格式
输入按如下格式给出:
T case1 case2 ⋮ caseT
casei 表示第 i 组测试数据,格式如下:
N S
输出格式
输出 T 行,第 i 行输出第 i 组测试数据的答案。
输入输出样例
输入#1
3 5 01001 3 000 15 110010111100101
输出#1
4 0 16
说明/提示
样例解释 1
对于第一组数据,例如,可以按如下方式通过四次操作将所有字符变为 0。无法用三次或更少次数完成,因此答案为 4。
- 删除首位字符
0,并将其(翻转为1后)插入到第一个和第二个字符之间(删除后 S 的位置)。此时 S 变为11001。 - 删除首位字符
1,并将其(翻转为0后)插入到第二和第三个字符之间。S 变为10001。 - 删除尾部字符
1,并将其(翻转为0后)插入到末尾。S 变为10000。 - 删除首位字符
1,并将其(翻转为0后)插入到开头。S 变为00000。
对于第二组数据,S 的所有字符一开始就是相同的,因此不需要任何操作。
数据范围
- 1≤T≤2×105
- 2≤N≤5×105
- T 和 N 为整数。
- S 是长度为 N 只包含
0和1的字符串。 - 所有测试数据中 N 的总和不超过 5×105。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?