A. Split it!

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值