c++调整回文波浪数
·
题目描述
输入一个字母字符串和一个 k 值,你需要将其调整为:
-
字符串时回文字符串,如 abba。
-
字符串每 k 个为一段,每一段都是相同的,如 k 为 3,abcabcabc满足条件。
调整可以将任意位置的字符改成任意字符,但调整一次记一次数。问调整完毕需要进行多少次调整。
输入格式
第一行两个整数,用空格隔开,分别代表字符串长度和 k。第二行一行字符串,代表待调整的字符串。
输出格式
一个整数,表示调整的次数。
输入输出样例
输入
6 2babbab
输出
2
说明/提示
babbab 改为 bbbbbb,共 2 次调整。
#include <iostream>
using namespace std;
int main(){
int n , k ;
string s;
cin>>n>>k;
cin>>s;
int a[26] = {};
int ans=0; //调整次数
int max_cut = 0;
for(int i=0; i<k/2; i++){
for(int j=0; j<26; j++){ //将数组a全赋0
a[j]=0;
}
for(int j=0; j<n/k; j++){
int ab = s[j*k+i]-(int)'a';
a[ab]+=1;
int ac = s[j*k+k-i-1]-(int)'a';
a[ac]+=1;
}
//求数组a中最大的数
max_cut = a[0];
for(int j=1; j<26; j++){
if(a[j]>max_cut){
max_cut = a[j];
}
}
ans+=n/k*2-max_cut;
}
for(int j=0; j<26; j++){ //将数组a全赋0
a[j]=0;
}
if(k%2!=0){
for(int i=0; i<n/k; i++){
int ad = s[k/2+i*k]-(int)'a';
a[ad]+=1;
}
//求数组a中最大的数
max_cut = a[0];
for(int j=1; j<26; j++){
if(a[j]>max_cut){
max_cut = a[j];
}
}
ans += n/k-max_cut;
}
cout<<ans;
return 0;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)