CF1496A Split it!(数学分析)

简介: CF1496A 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 ss and a parameter kk , you need to check if there exist k+1k+1 non-empty strings a_1,a_2...,a_{k+1}a1,a2...,ak+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}).s=a1+a2+…+ak+ak+1+R(ak)+R(ak−1)+…+R(a1). Here ++ represents concatenation. We define R(x)R(x) as a reversed string xx . For example R(abcd) = dcbaR(abcd)=dcba . Note that in the formula above the part R(a\_{k+1})R(a_k+1)$$ is intentionally skipped.


输入格式



The input consists of multiple test cases. The first line contains a single integer tt ( 1\le t\le 1001≤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 nn , kk ( 1\le n\le 1001≤n≤100 , 0\le k\le \lfloor \frac{n}{2} \rfloor0≤k≤⌊2n⌋ ) — the length of the string ss and the parameter kk .


The second line of each test case description contains a single string ss of length nn , consisting of lowercase English letters.


输出格式



For each test case, print "YES" (without quotes), if it is possible to find a_1,a_2,\ldots,a_{k+1}a1,a2,…,ak+1 , and "NO" (without quotes) otherwise.


You can print letters in any case (upper or lower).


题意翻译



题目描述


给出一个长度为  n 的字符串 s ,再给定一个参数 k 。

问是否存在字符串 a1,a2,...,ak+1,使得:


s=a1+a2+...+ak+ak+1+R(ak)+...+R(a2)+R(a1)

如果存在,输出 YES;否则输出 NO

上式中  + 为字符串拼接, R(ai) 为  ai 的反串。

本题多测。


输入格式


第一行 t 表示数据组数。

对于每组数据:

第一行  n,k 如题所述,第二行一个字符串  s。


输出格式


共 t  行,第  i 行为第 i  组数据。

对于第 ii 组数据,如果 s  满足题意条件,输出 YES;否则输出 NO


数据范围


1≤n≤100,0≤k≤⌊ n/2⌋


输入输出样例


输入  

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


输出  

YES
NO
YES
NO
YES
NO
NO


题意分析,我们观察这几个案例规律,我们可以得到一个共同规律,就是当我们取第一位和最后一位是否相等然后用i,j分别控制加减达到2边遍历,我们发现相同的数目总是大于或者等于k;所以我们只需要用代码表示出来,具体操作看代码。


#include <bits/stdc++.h>
using namespace std;
int t, n, k;
char s[105];
int main() {
    scanf("%d", &t);
    while (t--) {
        scanf("%d%d%s", &n, &k, s);
        int cnt = 0;
        for (int i = 0, j = n - 1; i < j - 1; ++i, --j) {//结束条件是刚刚好i=j 
            if (s[i] != s[j]) {
                break;
            }
            ++cnt;//想不通就想qweaq为什么是YES;这就是数学规律 
        }
        puts(cnt >= k ? "YES" : "NO");
    }
}





相关文章
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
387 1
|
开发者
Flutter笔记:build方法、构建上下文BuildContext解析
本文主要介绍Flutter中的build方法和构建上下文对象。
801 2
Flutter笔记:build方法、构建上下文BuildContext解析
element-ui下拉框el-select多选出现滚动条闪现
弹窗组件中放置了el-select下拉框组件,多选项较多时,聚焦弹出下拉选择框时,下方会出现一个横向滚动条闪现一下,虽然不影响使用,但是作为一个追求完美的码农肯定是受不了
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
企业管理利器:中国七大CRM厂商排行揭晓
CRM理念起源于20世纪80年代,从“接触管理”发展至1999年Gartner提出CRM概念。90年代末,CRM进入中国,初期由Siebel等外企主导,后随互联网兴起,国内企业如销售易、神州云动、金蝶CRM等崛起,推动了CRM市场的快速发展。至2015年,SaaS CRM成为焦点,尽管面临挑战,但各厂商积极探索创新,形成了百花齐放的局面。
|
Java Spring
springboot中的静态资源规则~
springboot中的静态资源规则~
280 1
|
负载均衡 网络协议 应用服务中间件
高可用 - 04 Keepalived编译安装
高可用 - 04 Keepalived编译安装
615 0
高可用 - 04 Keepalived编译安装
|
机器学习/深度学习 人工智能
【AI 初识】什么是迁移学习,它在人工智能中有什么用?
【5月更文挑战第2天】【AI 初识】什么是迁移学习,它在人工智能中有什么用?
|
消息中间件 JSON Java
RabbitMQ的springboot项目集成使用-01
RabbitMQ的springboot项目集成使用-01
|
关系型数据库 MySQL 测试技术
【MySQL】事务管理 -- 详解(下)
【MySQL】事务管理 -- 详解(下)
|
jenkins Java 持续交付
Mac下安装与配置Jenkins
Mac下安装与配置Jenkins
575 0