Charles 将一个字符串的优良分数定义为,在 1 ≤ i ≤ N / 2 1≤i≤N/2 1≤i≤N/2 的范围内,满足 S i ≠ S N − i + 1 S_i≠S_{N−i+1} Si=SN−i+1 的 i i i 的数量(索引从 1 1 1 开始)。
例如,字符串 C A B A B C CABABC CABABC 的优良分数为 2 2 2,因为 S 2 ≠ S 5 S_2≠S_5 S2=S5 并且 S 3 ≠ S 4 S_3≠S_4 S3=S4。
Charles 给了 A d a Ada Ada 一个长度为 N N N 的由大写字母构成的字符串 S S S,并让她将其转换为一个优良分数为 K K K 的字符串。
每次操作, A d a Ada Ada 都可以将字符串中的任意一个字符转换为任意一个大写字母。
请你帮助 A d a Ada Ada 确定,将给定字符串 S S S 转换为优良分数为 K K K 的字符串,所需要的最少操作次数。
输入格式
第一行包含整数
T
T
T,表示共有
T
T
T 组测试数据。
每组数据第一行包含两个整数 N N N 和 K K K。
第二行包含一个长度为 N N N 的由大写字母构成的字符串 S S S。
输出格式
每组数据输出一个结果,每个结果占一行。
结果表示为 Case #x: y,其中
x
x
x 为组别编号(从
1
1
1 开始),
y
y
y 为所需最少操作次数。
数据范围
全部数据:
1
≤
T
≤
100
,
0
≤
K
≤
N
/
2
。
1≤T≤100,0≤K≤N/2。
1≤T≤100,0≤K≤N/2。
测试点
1
1
1 (小数据测试点):
1
≤
N
≤
100
。
1≤N≤100。
1≤N≤100。
测试点
2
2
2 (大数据测试点):最多不超过
10
10
10 组数据满足,
1
≤
N
≤
2
×
1
0
5
1≤N≤2×10^5
1≤N≤2×105,其余数据满足,
1
≤
N
≤
100
1≤N≤100
1≤N≤100。
输入样例:
2
5 1
ABCAA
4 2
ABAA
输出样例:
Case #1: 0
Case #2: 1
样例解释
对于测试数据
1
1
1,给定字符串的优良分数刚好为
1
1
1,所以不需要任何操作。
对于测试数据 2 2 2,将索引 1 1 1 处的字符改为 B B B 即可。
#include
using namespace std;
int main(){
int t;
cin >> t;
string s;
int n, k;
for(int id = 1; id <= t; id++){
cin >> n >> k >> s;
int cnt = 0;
for(int i = 0; i < n / 2; i++)
if(s[i] != s[n-i-1])
cnt++;
printf("Case #%d: %d\n", id, abs(cnt - k));
}
return 0;
}