602 [CF 1385D] a-Good String
// 602 [CF 1385D] a-Good String.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://oj.daimayuan.top/course/22/problem/978
给你一个长度为 n的由小写字母组成的字符串 s,保证 n=2k,其中 k为大于等于零的整数。
一个非空字符串 s被称为 c-good(c为 a...z中的某个字母)的,需要满足下列三个条件之一:
s长度为 1,且只含有 c字符;
s长度大于 1,且 s的前一半全为字符 c,
后一半为 next(c)-good的字符串,其中 next(c)表示 c后面的那一个字母;
s长度大于 1,且 s的前一半为 next(c)-good的字符串,后一半全为字符 c;
例如 aabc 是 a-good的,ffgheeee 是 e-good的。
对于给定的字符串 s,请求出最少改变 s中几个字符可以把它变成 a-good的字符串。
输入格式
输入有多组询问。
第一行一个整数 T 表示数据组数。
对于每组数据包含两行,第一行一个整数 n,第二行一个长度为 n的字符串 s。
输出格式
对于每组数据,输出一行一个整数表示答案。
样例输入
5
8
bbdcaaaa
8
asdfghjk
8
ceaaaabb
8
bbaaddcc
1
z
1
8
ffgheeee
样例输出
0
7
4
5
1
数据规模
对于 100%的数据,保证 1≤T≤5,1≤n≤131072
,保证 n=2k,其中 k为大于等于零的整数。
*/
#include <iostream>
#include <string>
using namespace std;
int n, T;
string str;
int calc(int l, int r, char x) {
if (l == r) {
if (str[l] == x) {
return 0;
}
return 1;
}
int m = (l + r) >> 1;
int res1 = calc(l, m, x + 1);
int res2 = calc(m + 1, r, x + 1);
for (int i = l; i <= m; i++) {
if (str[i] != x) {
res2++;
}
}
for (int i = m + 1; i <= r; i++) {
if (str[i] != x) {
res1++;
}
}
return min(res1,res2);
}
void solve() {
cin >> n >> str;
cout << calc(0, n - 1, 'a') << endl;
return;
}
int main()
{
cin >> T;
while (T--) {
solve();
}
return 0;
}
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2023-01-02 220. 最长公共子序列问题(挑战程序设计竞赛)
2023-01-02 213. 字典序最小问题 Best Cow Line(挑战程序设计竞赛)
2018-01-02 windows下使用redis c++