Split it! (Codeforces 1496A)
Tags: Greedy, strings

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 $$$a_1,a_2...,a_{k+1}$$$, such that $$$$$$s=a_1+a_2+\ldots +a_k+a_{k+1}+R(a_k)+R(a_{k-1})+\ldots+R(a_{1}).$$$$$$ 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(a_{k+1})$$$ is intentionally skipped.

Input: The input consists of multiple test cases. The first line contains a single integer $$$t$$$ ($$$1\le t\le 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\le n\le 100$$$, $$$0\le k\le \lfloor \frac{n}{2} \rfloor$$$)  — 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 $$$a_1,a_2,\ldots,a_{k+1}$$$, and "NO" (without quotes) otherwise.You can print letters in any case (upper or lower).

Note: In the first test case, one possible solution is $$$a_1=qw$$$ and $$$a_2=q$$$.In the third test case, one possible solution is $$$a_1=i$$$ and $$$a_2=o$$$.In the fifth test case, one possible solution is $$$a_1=dokidokiliteratureclub$$$.

Sample Inputs:
7
5 1
qwqwq
2 1
ab
3 1
ioi
4 2
icpc
22 0
dokidokiliteratureclub
19 8
imteamshanghaialice
6 3
aaaaaa

Sample Outputs:
YES
NO
YES
NO
YES
NO
NO

Solution (Python):
import math
from math import ceil, floor, gcd, inf, sqrt
from collections import Counter, defaultdict
import heapq, bisect
import sys
for tests in range(int(input())):
    (n, k) = map(int, input().split())
    s = input()
    if k == 0:
        print('YES')
    else:
        cur = s[:k] + s[n - k:n]
        cur2 = cur[::-1]
        if cur == cur2 and 2 * k != n:
            print('YES')
        else:
            print('NO')

Solution (Python):
I = input
exec(int(I()) * "n,k=map(int,I().split());s=I();print('YNEOS'[s[:k]!=s[:~k:-1]or 2*k==n::2]);")

Solution (Python):
I = input
exec(int(I()) * "n,k=map(int,I().split());s=I();print('YNEOS'[s[:k]!=s[:~k:-1]or 2*k==n::2]);")