Codeforces Round 706 (Div. 2) A. Split it!

发布时间 2023-10-10 17:53:51作者: zsxuan

给一个长度为 \(n\) 的字符串 \(s\) 。给定一个正整数 \(k\) 。询问 \(s\) 能否等于 \(a_1 + a_2 + \cdots + a_k + a_{k + 1} + R(a_k) + R(a_{k - 1}) + \cdots + R(a_{1})\)

其中 \(a_i\) 代表一个非空字符串, \(R(a_i)\) 代表 \(a_i\)\(reverse\)

由于 \(a_{k + 1}\) 需要是非空,让指针 \(i\) 扫到 \(\lceil \frac{n}{2} \rceil - 1\) 的位置。

如果 \(s_{i} = s_{n + 1 - i}\) 则指针继续右移, \(cnt += 1\) 。否则 \(break\) 结束扫描。

\(cnt \geq k\) 则可以分出 \(k\) 个非空字符串,否则不能。

view
#include <bits/stdc++.h>
void solve(){
	int n, k; std::cin >> n >> k;
	std::string s; std::cin >> s; s = " " + s;
	int cnt = 0;
	for (int i = 1; i < (n + 1) / 2; i++) {
		if (s[i] == s[n + 1 - i]) cnt++;
		else break;
	}
	std::cout << (k <= cnt ? "YES" : "NO") << '\n';
}
int main() {
	int _ = 1;  std::cin >> _;
	while (_--) {solve();}
	return 0;
}