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;
}
posted @ 2026-10-17 18:59  SCX2014  阅读(2)  评论(0)    收藏  举报