首页 > 其他分享 >602 [CF 1385D] a-Good String

602 [CF 1385D] a-Good String

时间:2025-01-02 18:09:01浏览次数:1  
标签:good return String int CF 整数 Good 字符串 长度

// 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;
}

 

标签:good,return,String,int,CF,整数,Good,字符串,长度
From: https://www.cnblogs.com/itdef/p/18648445

相关文章

  • 使用JSONObject.getString()时报错:Cannot resolve method ‘getString‘ in ‘JSONObjec
    目录使用JSONObject.getString()时报错:Cannotresolvemethod'getString'in'JSONObject',JSONObject三种库的用法一、背景描述二、问题解决1、使用org.json.JSONObject读取属性2、使用org.json.simple.JSONObject读取属性3、使用cn.hutool.json.JSONObject读取属性三、......
  • LeetCode 1422. Maximum Score After Splitting a String
    ......
  • CF1110D Jongmah
    经典题。\(\tt{Link}\)题意你手中有$$\(n\)$$张牌。每张牌上都写着一个介于\(1\)和\(m\)之间的整数。要赢得游戏,需要组成一定数量的三元组。每个三元组由三张牌组成,这样写在牌上的数字要么全部相同,要么连续。例如,\(7,7,7\)和\(12,13,14\)都是有效的三连牌,但\(2,......
  • [CF2353D] Refined Product Optimality 题解
    首先让我们输出的是不操作的值。不定序,一看就很贪心。经过分类分类分类可证,\(a,b\)都是升序(降序)的时候是最优的。再看加操作的。相当于要维护这两个升序序列。我们发现,每次操作影响的值很少,最多两个值。在一个连续段中,修改的值相当于和末尾值交换,再加一。唐点:找这个末尾没必要......
  • CF848E Days of Floral Colours 题解
    Problem-848E-Codeforces首先,由于整个图是对称的,所以我们将其沿直径分为两半,在算一半答案时把每一段的贡献平方再相加即可。(因为对面也有一段相同长度的也要计入贡献)现在我们的问题转化为了对于一个长为\(n\)的环,你可以给一个点连出一个线头(即在原图中连向对面的边)将其余......
  • test1.sumocfg
    <configuration><viewsettings><delayvalue="500"/></viewsettings><input><net-filevalue="test1.net.xml"/><route-filesvalue="test1.rou.xml"/></input>......
  • CF601E A Museum Robbery 题解
    题目传送门前置知识线段树与离线询问解法普通的回退背包无法处理本题中的删除操作,考虑线段树分治后转化为只进行添加的背包。具体实现时可以对每个深度开一个背包的转移数组,时间复杂度为\(O(nk\logq+qk)\),可以接受。代码#include<bits/stdc++.h>usingnamespacestd;#......
  • 洛谷 P11487 「Cfz Round 5」Gnirts 10——题解
    洛谷P11487「CfzRound5」Gnirts10传送锚点摸鱼环节「CfzRound5」Gnirts10题目背景Englishstatement.YoumustsubmityourcodeattheChineseversionofthestatement.InMemoryof\(\text{F}\rule{66.8px}{6.8px}\).题目描述题面还是简单一点好。给定......
  • 题解:CF727F Polycarp's problems
    link。贪心做法。本题贪心做法的实质就是用整数尽量多地抵消该整数后面的负数。如果正着做,没有办法考虑全该数后面的所有负数,所以倒着做。例如当前遍历到了\(50\),此时序列如下:\[\dots,50,-50,-10,-20\]易得我们\(50\)应该抵消的是\(-10,-20\),而不是前面的\(-50\),因为......
  • 题解:CF2044C Hard Problem
    CF2044CHardProblem思路先让那\(a+b\)个学生入座,记第一、二排分别入座了\(num1,num2\)个学生。容易想到最终答案为\(2\cdotm\)和\(num1+num2+c\)取最小值。(注:\(2\cdotm\)为所有座位均坐满,\(num1+num2+c\)为所有学生均有位置)AC代码#include<bits/stdc++.h>using......