Kawashiro Nitori is a girl who loves competitive programming.
One day she found a string and an integer. As an advanced problem setter, she quickly thought of a problem.
Given a string s and a parameter k, you need to check if there exist k+1 non-empty strings a1,a2…,ak+1, such that
s=a1+a2+…+ak+ak+1+R(ak)+R(ak−1)+…+R(a1).
Here + represents concatenation. We define R(x) as a reversed string x. For example R(abcd)=dcba. Note that in the formula above the part R(ak+1) is intentionally skipped.
Input
The input consists of multiple test cases. The first line contains a single integer t (1≤t≤100) — the number of test cases. The description of the test cases follows.
The first line of each test case description contains two integers n, k (1≤n≤100, 0≤k≤⌊n2⌋) — the length of the string s and the parameter k.
The second line of each test case description contains a single string s of length n, consisting of lowercase English letters.
Output
For each test case, print “YES” (without quotes), if it is possible to find a1,a2,…,ak+1, and “NO” (without quotes) otherwise.
You can print letters in any case (upper or lower).
Example
input
7
5 1
qwqwq
2 1
ab
3 1
ioi
4 2
icpc
22 0
dokidokiliteratureclub
19 8
imteamshanghaialice
6 3
aaaaaa
output
YES
NO
YES
NO
YES
NO
NO
My Answer Code:
/*
Author:Albert Tesla Wizard
Time:2021/3/12 19:57
*/
#include<bits/stdc++.h>
using namespace std;
bool Reverse(string s1,string s2)
{
int len=s2.length();
string s(len,'\0');
for(int i=0;i<len;i++)s[i]=s2[len-i-1];
if(s1==s)return true;
else return false;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--)
{
bool ans;
int n,k;
cin>>n>>k;
string s;
cin>>s;
if(2*k+1>n)ans=false;
else
{
int len=s.length();
string s1=s.substr(0,k);
string s2=s.substr(len-k);
if(Reverse(s1,s2))ans=true;
else ans=false;
}
if(ans)cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
return 0;
}