P16837 [GKS 2021 #A] K-Goodness String 题解
题目大意
给你一个字符串,将一个字符串的好分数定义为满足 \(S_i=S_{N−i+1}\) 的下标 \(i\) 的个数,其中 \(1≤i≤N/2\)。问最少修改几个字符可以让这个字符串的好分数恰好为 \(K\)。
算法分析
先求出目前字符串的好分数记作 \(W\),因为修改一个字符是可以直接改的,所以每次修改都能使好分数加 \(1\) 或减 \(1\),那么答案就是 \(\lvert W-N \rvert\)。
#include<bits/stdc++.h>
using namespace std;
int main(){
std::ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T,id=0;
cin>>T;
while(T--){
int n,k,sum=0;
string s;
cin>>n>>k>>s;
s=" "+s;
for(int i=1;i<=n/2;i++){//计算目前字符串的好分数
if(s[i]!=s[n-i+1])sum++;
}
cout<<"Case #"<<++id<<": ";
cout<<abs(sum-k)<<'\n';
}
return 0;
}

浙公网安备 33010602011771号