翻译
查看原帖
翻译
1255776
Mr_user楼主2024/1/18 12:35

这是一个关于字符串操作的编程问题,描述了一个特定类型的“c-good”字符串,并询问将给定字符串转换为'a'-good字符串所需的最小移动次数。下面是该问题的中文翻译:

给定一个由小写拉丁字母组成的字符串s[1...n],保证n = 2^k,对于某个整数k ≥ 0。

如果满足以下三个条件之一,则称字符串s[1...n]为c-good字符串:

• 字符串的长度为1,并且它由字符c组成(即s1 = c);

• 字符串的长度大于1,字符串的前半部分只包含字符c(即S1=S2=...=Sn/2= c),并且字符串的后半部分(即字符串Sn/2+1·Sn/2+2···Sn)是一个(c+1)-good字符串;

• 字符串的长度大于1,字符串的后半部分只包含字符c(即Sn/2+1=Sn/2+2=···=Sn = c),并且字符串的前半部分(即字符串s1s2...sn/2)是一个(c+1)-good字符串。

例如:"aabc"是'a'-good字符串,"ffgheeee"是'e'-good字符串。

一次移动中,你可以选择从1到n的任意索引i,并将si替换为任何小写拉丁字母(从'a'到'z'的任何字符)。

你的任务是找到从s获得'a'-good字符串(即c-good字符串,c = 'a')所需的最小移动次数。保证答案总是存在。

你必须回答t个独立的测试用例。

另一个'a'-good字符串的例子如下。考虑字符串s="cdbbaaaa"。它是一个'a'-good字符串,因为:

• 字符串的后半部分("aaaa")只包含字符'a';

• 字符串的前半部分("cdbb")是一个'b'-good字符串,因为:

· 字符串的后半部分("bb")只包含字符'b';

字符串的前半部分("cd")是一个'c'-good字符串,因为:

■ 字符串的前半部分("c")只包含字符'c';

■ 字符串的后半部分("d")是一个'd'-good字符串。

输入:

输入的第一行包含一个整数t(1 ≤ t ≤ 2·10⁴)——测试用例的数量。然后是t个测试用例。

测试用例的第一行包含一个整数n(1 ≤ n ≤ 131072)——s的长度。保证n = 2^k,对于某个整数k ≥ 0。测试用例的第二行包含由n个小写拉丁字母组成的字符串s。

保证n的总和不超过2·10⁵(∑n ≤ 2·10⁵)。

输出:

对于每个测试用例,打印答案——从s获得'a'-good字符串(即c-good字符串,c = 'a')所需的最小移动次数。保证答案存在。

2024/1/18 12:35
加载中...