CF1385D.a-Good String
普及/提高-
通过率:0%
时间限制:2.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given a string s[1…n] consisting of lowercase Latin letters. It is guaranteed that n=2k for some integer k≥0.
The string s[1…n] is called c-good if at least one of the following three conditions is satisfied:
- The length of s is 1, and it consists of the character c (i.e. s1=c);
- The length of s is greater than 1, the first half of the string consists of only the character c (i.e. s1=s2=⋯=s2n=c) and the second half of the string (i.e. the string s2n+1s2n+2…sn) is a (c+1)-good string;
- The length of s is greater than 1, the second half of the string consists of only the character c (i.e. s2n+1=s2n+2=⋯=sn=c) and the first half of the string (i.e. the string s1s2…s2n) is a (c+1)-good string.
For example: "aabc" is 'a'-good, "ffgheeee" is 'e'-good.
In one move, you can choose one index i from 1 to n and replace si with any lowercase Latin letter (any character from 'a' to 'z').
Your task is to find the minimum number of moves required to obtain an 'a'-good string from s (i.e. c-good string for c= 'a'). It is guaranteed that the answer always exists.
You have to answer t independent test cases.
Another example of an 'a'-good string is as follows. Consider the string $s = $"cdbbaaaa". It is an 'a'-good string, because:
- the second half of the string ("aaaa") consists of only the character 'a';
- the first half of the string ("cdbb") is 'b'-good string, because:
- the second half of the string ("bb") consists of only the character 'b';
- the first half of the string ("cd") is 'c'-good string, because:
- the first half of the string ("c") consists of only the character 'c';
- the second half of the string ("d") is 'd'-good string.
给你一个长度为 n 的字符串 s[1…n],由小写拉丁字母组成。保证 n=2k(其中 k≥0 为整数)。
若字符串 s[1…n] 满足以下三个条件中的至少一个,则称其为 c-good(关于字符 c 是“好”的):
- 字符串长度为 1,且该字符恰好为 c(即 s1=c);
- 字符串长度大于 1,且前半部分(即 s1s2…s2n)全部由字符 c 组成(即 s1=s2=⋯=s2n=c),而后半部分(即 s2n+1s2n+2…sn)是一个 (c+1)-good 字符串;
- 字符串长度大于 1,且后半部分(即 s2n+1s2n+2…sn)全部由字符 c 组成(即 s2n+1=s2n+2=⋯=sn=c),而前半部分(即 s1s2…s2n)是一个 (c+1)-good 字符串。
例如:"aabc" 是 'a'-good 字符串,"ffgheeee" 是 'e'-good 字符串。
在一次操作中,你可以选择一个下标 i(1≤i≤n),并将 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 字符串。
输入格式
The first line of the input contains one integer t (1≤t≤2⋅104) — the number of test cases. Then t test cases follow.
The first line of the test case contains one integer n (1≤n≤131 072) — the length of s. It is guaranteed that n=2k for some integer k≥0. The second line of the test case contains the string s consisting of n lowercase Latin letters.
It is guaranteed that the sum of n does not exceed 2⋅105 (∑n≤2⋅105).
输入的第一行包含一个整数 t(1≤t≤2⋅104),表示测试用例的数量。随后是 t 个测试用例。
每个测试用例的第一行包含一个整数 n(1≤n≤131 072),表示字符串 s 的长度。保证 n=2k,其中 k 是某个满足 k≥0 的整数。每个测试用例的第二行包含一个由 n 个小写拉丁字母组成的字符串 s。
保证所有测试用例中 n 的总和不超过 2⋅105(即 ∑n≤2⋅105)。
输出格式
For each test case, print the answer — the minimum number of moves required to obtain an 'a'-good string from s (i.e. c-good string with c= 'a'). It is guaranteed that the answer exists.
对于每个测试用例,输出答案——将字符串 s 变为 'a'-good 字符串(即满足 c= 'a' 的 c-good 字符串)所需的最少操作次数。保证答案存在。
输入输出样例
输入#1
6 8 bbdcaaaa 8 asdfghjk 8 ceaaaabb 8 bbaaddcc 1 z 2 ac
输出#1
0 7 4 5 1 1
输入解题思路,AI测评打分。不知道怎么写?