#include <bits/stdc++.h> using namespace std; // 判断:长度为 n 的二进制串 s,是否能在恰好 k 次单点翻转后变成回文 bool can(const string& s, int k) { int n = (int)s.size(); int mism = 0; // 两端不相等的“对数” for (int i = 0; i < n / 2; ++i) { if (s[i] != s[n - 1 - i]) ++mism; } if (k < mism) return false; // 不够修复所有不相等的对 if (n % 2 == 1) return true; // 有中间位,剩余随便花 return ((k - mism) % 2 == 0); // 偶长度:剩余必须是偶数 } int main() { int T; cin >> T; while (T--) { int n, k; string s; cin >> n >> k >> s; // 读入 n, k, s cout << (can(s, k) ? "YES" : "NO") << '\n'; } return 0; } // 64 位输出请用 printf("%lld")