首页 > 试题广场 >

翻转01

[编程题]翻转01
  • 热度指数:675 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\,\,\,\,\,\,\,\,\,\,给定一个长度为  且仅由 '\tt 0' 、 '\tt 1' 两种字符构成的字符串  。每次操作你都可以选择字符串  的任意一个字符,并将其反置
\,\,\,\,\,\,\,\,\,\,询问经过恰好  次操作后,字符串  是否为一个回文字符串

\,\,\,\,\,\,\,\,\,\,若当前字符为 '\tt 0' ,反置后为 '\tt 1' ;若当前字符为 '\tt 1' ,反置后为 '\tt 0' 。
\,\,\,\,\,\,\,\,\,\,一个字符串被称作回文字符串,当且仅当这个字符串从左往右读和从右往左读都是相同的。

输入描述:
\,\,\,\,\,\,\,\,\,\,每个测试文件均包含多组测试数据。第一行输入一个整数 T\ (1\le T\le 100) 代表数据组数,每组测试数据描述如下:
\,\,\,\,\,\,\,\,\,\,第一行输入两个整数 n,k \left(1 \le n \le 1000;\ 0 \le k \le n \right)
\,\,\,\,\,\,\,\,\,\,第二行输入一个长度为  且仅由 '\tt 0' 、 '\tt 1' 两种字符构成的字符串  。


输出描述:
\,\,\,\,\,\,\,\,\,\,对于每一组测试数据,如果经过恰好  次操作后,字符串  可以成为一个回文字符串,在一行上输出 \rm YES ;否则,直接输出 \rm NO
示例1

输入

3
6 1
101100
6 2
101100
6 3
101100

输出

YES
NO
YES

说明

\,\,\,\,\,\,\,\,\,\,对于第一组测试数据,可得到的回文串为 "\tt101101" 、"\tt 001100" ;
\,\,\,\,\,\,\,\,\,\,对于第二组测试数据,无论如何都不能使得其变成回文串;
\,\,\,\,\,\,\,\,\,\,对于第三组测试数据,由于其包含第一组测试数据,因此也可以变成回文串。
示例2

输入

4
5 4
10101
4 3
1001
6 4
100100
6 5
000001

输出

YES
NO
YES
YES

备注:
\,\,\,\,\,\,\,\,\,\,在几乎全部的情况下,\sf PyPy 的运行速度优于 \sf Python ,我们建议您选择对应版本的 \sf PyPy 进行提交、而不是 \sf Python
头像 有胆量的柯基在学习
发表于 2025-08-21 12:33:33
#include <bits/stdc++.h> using namespace std; // 判断:长度为 n 的二进制串 s,是否能在恰好 k 次单点翻转后变成回文 bool can(const string& s, int k) { int n = (int)s. 展开全文
头像 想run的秋田犬在写文章
发表于 2025-08-05 21:52:27
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = 展开全文
头像 猫狗Cola
发表于 2025-07-26 11:47:07
#include <iostream> using namespace std; int main() { int q; cin >> q; while (q--) { int n, k; cin >> 展开全文
头像 离上岸不远了的小山竹很喜欢吃蛋
发表于 2025-07-29 14:12:36
package main import ( "bufio" "fmt" "os" ) func main() { in := bufio.NewReader(os.Stdin) var T int 展开全文
头像 丨阿伟丨
发表于 2025-09-11 16:06:48
题目链接 翻转01 题目描述 给定一个长度为 的 01 字符串和一个整数 。每次操作可以翻转字符串中的任意一个字符('0' 变为 '1','1' 变为 '0')。 任务是判断是否能通过恰好 次操作,使得字符串变为一个回文字符串。 解题思路 这个问题的核心在于分析将字符串变为回文串所需的翻转次数与 展开全文