题解 CF1385D 【a-Good String】
题意
定义:字符串s 为一个c-好串(c 为一个字符)时,必须满足:
当\(|s| = 1\) ,\(s = c\)
当\(|s| > 1\), \(s\) 的左半部分为全为 \(c\),右半部分为一个
(c+1)-好串或者 \(s\) 的右半部分为全为 \(c\),左半部分为一个(c+1)-好串
其中 \(|s|\) 代表 字符串 \(s\) 的长度。
举个例子:当 \(s=“cdbbaaaa"\)时,\(s\) 是一个 a-好串
现在,给你一个字符串 \(s\) ( \(|s| = 2^k\) ),问最少替换多少个字符,使其为一个 a-好串。
思路
我们可以按照题意递归求解。
返回边界 : 当前串长度为 1
每次将串分成左右两部分,分类讨论,最后取最小值作为答案。
具体见代码。
代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#define ll long long
using namespace std;
const int MAXN = 131075;
int n;
char s[MAXN];
// getans 代表将[l,r] 变为一个 c-好串 所需最小改动
int getans(int l,int r,char c){
if(l==r) return s[l]!=c; // 如果该串已经符合要求,则不需要改动,返回 0
int tot1 = 0,tot2 = 0;
int mid = (l+r)>>1;
for(int i = l;i <= mid;i++) if(s[i]!=c) tot1++;
for(int i = mid+1;i <= r;i++) if(s[i]!=c) tot2++;
tot1 += getans(mid+1,r,c+1);
tot2 += getans(l,mid,c+1);
return min(tot1,tot2);
// tot1 代表将左区间全变为 c, 右区间变为一个c+1 好串所需最小改动
// tot2 代表将右区间全变为 c, 左区间变为一个c+1 好串所需最小改动
}
int main (){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
scanf("%s",s+1);
printf("%d\n",getans(1,n,'a'));
}
}
题解 CF1385D 【a-Good String】的更多相关文章
- PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789177.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 题解 CF1354B 【Ternary String】
题意 给出一个字符串,只包含 \({1,2}\) 或 \({3}\) .从中找出一个长度最短的子串,要求至少包含 \({1,2,3}\) 各一次,并输出其长度. 输入格式 本题有多组测试数据 第一行一 ...
- 【题解】UVA10298 Power String(KMP)
UVA10298:https://www.luogu.org/problemnew/show/UVA10298 思路 设P[x]数组为 前x个字符的最大前缀长度等于后缀字串 由P数组的定义我们可以知道 ...
- 「题解」Just A String
目录 题目 原题目 简易题意 思路及分析 代码 题目 原题目 点这里 简易题意 现定义一个合法的字符串满足将其打散并任意组合之后能够形成回文串. 给你 \(m\) 种字母,问随机构成长度为 \(n\) ...
- LeetCode Reverse String II
原题链接在这里:https://leetcode.com/problems/reverse-string-ii/#/description 题目: Given a string and an inte ...
- Mediocre String Problem (2018南京M,回文+LCP 3×3=9种做法 %%%千年好题 感谢"Grunt"大佬的细心讲解)
layout: post title: Mediocre String Problem (2018南京M,回文+LCP 3×3=9种做法 %%%千年好题 感谢"Grunt"大佬的细 ...
- LeetCode Add Strings
原题链接在这里:https://leetcode.com/problems/add-strings/ 题目: Given two non-negative numbers num1 and num2 ...
- 266. Palindrome Permutation
题目: Given a string, determine if a permutation of the string could form a palindrome. For example,&q ...
- [LeetCode] 3. Longest Substring Without Repeating Characters 解题思路
Given a string, find the length of the longest substring without repeating characters. For example, ...
随机推荐
- xenomai内核解析之双核系统调用(一)
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 xenomai 内核系统调用 一.32位Lin ...
- 利用salt stack pillar安装多组keepalived
利用salt stack pillar安装多组keepalived 环境描述 在生产环境中,需要搭建三套keepalived环境,3个master和3个backup,要安装的软件和配置文件,虽然不是很 ...
- docer
docker默认是不保存文件的,包保存文件需要进行映射 dockerfile编写如下 直接下面的命令会失败 因为run后面的命令/bin/bash会失败,执行的是dockffile中定义的httpd ...
- CLR垃圾收集器
CLR GC是一种引用跟踪算法,大致步骤如下: 1.暂停进程中所有的线程: 2.标记阶段,遍历堆中的所有对象,标记为删除,然后检查所有活动根,如果有引用对象,就标记那个对象可达,否则不可达: 3.GC ...
- vue 生命周期钩子 路由钩子 动画钩子 执行顺序
进入首页的钩子们 1 路由钩子 路由跳转前beforeEach 2 路由钩子 home组件内部:守卫执行前beforeRouteEnter 3.路由钩子 路由跳转后afterEach 4 生命周期 h ...
- 深入理解JVM(③)Java模块化系统
前言 JDK9引入的Java模块化系统(Java Platform Module System ,JPMS)是 对Java技术的一次重要升级,除了像之前JAR包哪有充当代码的容器之外,还包括: 依赖其 ...
- 化繁就简,如何利用Spring AOP快速实现系统日志
1.引言 有关Spring AOP的概念就不细讲了,网上这样的文章一大堆,要讲我也不会比别人讲得更好,所以就不啰嗦了. 为什么要用Spring AOP呢?少写代码.专注自身业务逻辑实现(关注本身的业务 ...
- CentOS 的数字命令级别
1 user commands 2 system calls 3 library functions 4 special files 5 file formats 6 ...
- Yolo训练自定义目标检测
Yolo训练自定义目标检测 参考darknet:https://pjreddie.com/darknet/yolo/ 1. 下载darknet 在 https://github.com/pjreddi ...
- JavaScript图形实例:SierPinski三角形
1.SierPinski三角形 Sierpinski三角形是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集.其生成过程为: (1)取一个三角形(多数使用等边三角形): (2) ...