zoukankan      html  css  js  c++  java
  • CF1385D a-Good String(分治)

    一种分治的思想,看每次的左右区间,找一个需要更改小的进行更改,然后对另一个区间进行继续往下分治的更改。

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int T,n;
    char s[200005];
    int solve(int l,int r,char c){
    	if(l==r){
    		if(s[l]==c) return 0;
    		return 1;
    	}
    	int cnt=0,tot=0;
    	int mid=(l+r)>>1;
    	for(int i=l;i<=mid;i++){
    		if(s[i]!=c) cnt++;
    	}
    	for(int i=mid+1;i<=r;i++){
    		if(s[i]!=c) tot++;
    	}
    	cnt+=solve(mid+1,r,(char)(c+1));
    	tot+=solve(l,mid,(char)(c+1));
    	return min(cnt,tot);
    }
    int main(){
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d",&n);
    		scanf("%s",s+1);
    		printf("%d
    ",solve(1,n,'a'));
    	}
    	return 0;
    }
    
  • 相关阅读:
    settTimeout vs setInterval
    JS继承
    JS创建对象
    原型链
    开始学习python的感受
    Problem 29
    Python 查看关键字
    Problem 21
    Problem 34
    Problem 42
  • 原文地址:https://www.cnblogs.com/New-ljx/p/15358264.html
Copyright © 2011-2022 走看看