CF937Div4E :分段比较
Nearly Shortest Repeating Substring
题面翻译
给你一个长度为 \(n\) 的字符串 \(s\) ,它由小写字母组成。求最短字符串 \(k\) 的长度,使得多个(可能是一个) \(k\) 可以连接在一起,形成一个长度与 \(s\) 相同的字符串,且最多只有一个不同的字符。
更正式地说,求最短字符串 \(k\) 的长度,使得 \(c = \underbrace{k + \cdots + k}_{x\rm\ \text{times}}\) 为某个正整数 \(x\) ,字符串 \(s\) 和 \(c\) 的长度相同,且 \(c_i \neq s_i\) 中最多有一个 \(i\) (即存在 \(0\) 或 \(1\) 这样的位置)。
题目描述
You are given a string $ s $ of length $ n $ consisting of lowercase Latin characters. Find the length of the shortest string $ k $ such that several (possibly one) copies of $ k $ can be concatenated together to form a string with the same length as $ s $ and, at most, one different character.
More formally, find the length of the shortest string $ k $ such that $ c = \underbrace{k + \cdots + k}_{x\rm\ \text{times}} $ for some positive integer $ x $ , strings $ s $ and $ c $ has the same length and $ c_i \neq s_i $ for at most one $ i $ (i.e. there exist $ 0 $ or $ 1 $ such positions).
输入格式
The first line contains a single integer $ t $ ( $ 1 \leq t \leq 10^3 $ ) — the number of test cases.
The first line of each test case contains a single integer $ n $ ( $ 1 \leq n \leq 2\cdot10^5 $ ) — the length of string $ s $ .
The second line of each test case contains the string $ s $ , consisting of lowercase Latin characters.
The sum of $ n $ over all test cases does not exceed $ 2\cdot10^5 $ .
输出格式
For each test case, print the length of the shortest string $ k $ satisfying the constraints in the statement.
样例 #1
样例输入 #1
5
4
abaa
4
abba
13
slavicgslavic
8
hshahaha
20
stormflamestornflame
样例输出 #1
1
4
13
2
10
提示
In the first test case, you can select $ k = \texttt{a} $ and $ k+k+k+k = \texttt{aaaa} $ , which only differs from $ s $ in the second position.
In the second test case, you cannot select $ k $ of length one or two. We can have $ k = \texttt{abba} $ , which is equal to $ s $ .
本题思路:
(有长度L|n时,长度为L的串才是s的子串)降低枚举频率,此时枚举最小子串长度L(有L * x = s)。
接下来考虑其,最多不匹配位置为1(当不匹配位置为2时直接弹出)
题解认为:不同的字母也可能出现在前缀中(例如, 和 =2),因此我们也要对长度为的后缀进行同样的检查。如果其中之一为真,则输出 。
不匹配字符出现的问题(可能会出现前缀中,导致枚举前缀超过限制1这个前提)所以对应的这里也要同样枚举后缀消除影响
当时思路:
乱七八糟的思路有很多,想到计数每个字符出现次数,这样重复符合要求即最终长度,但很快被否定,再次的想法是找到最大子串即符合原理(夭折)····
看完题解后:
相应的总是想将黑盒数据取出,或者知道黑盒数据是什么,忽略了数据本身就是有价值的,引申出copy模版串匹配应该也是可以的,但相较于原串比较更麻烦
CF937Div4E :分段比较的更多相关文章
- 操作系统篇-分段机制与GDT|LDT
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在<操作系统篇-浅谈实模式与保护模式>中提到了两种模式,我们说在操作系统中,其实大部分时间是待在保护模式中的. ...
- 分段二次插值——用Python进行数值计算
事实上在实际使用中,高次插值显然是很不适合的,高次插值将所有样点包涵进一个插值函数中,这是次幂高的原因.高次计算复杂,而且刚开始的一点误差会被方的很大.因此将整个区间分为若干个小区间,在每一个小区间进 ...
- iOS系列 基础篇 09 开关、滑块和分段控件
iOS系列 基础篇 09 开关.滑块和分段控件 目录: 案例说明 开关控件Switch 滑块控件Slider 分段控件Segmented Control 1. 案例说明 开关控件(Switch).滑块 ...
- kafka的log存储解析——topic的分区partition分段segment以及索引等
转自:http://blog.csdn.net/jewes/article/details/42970799 引言 Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相 ...
- 洛谷 P1182 数列分段Section II Label:贪心
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...
- 【UISegmentedControl】- 分段控件
一.初始化 二.常见的属性 1.segmentedControlStyle属性:设置基本的样式 2.momentary属性:设置在点击后是否恢复原样 . 3.numberOfSegments属性:只读 ...
- 【JAVA并发编程实战】9、锁分段
package cn.study.concurrency.ch11; /** * 锁分段 * @author xiaof * */ public class StripedMap { //同步策略:就 ...
- 【OS】分页和分段
在网上找到了一个比较形象的比喻 打个比方,比如说你去听课,带了一个纸质笔记本做笔记.笔记本有100张纸,课程有语文.数学.英语三门,对于这个笔记本的使用,为了便于以后复习方便,你可以有两种选择. ...
- Mysql 分段统计
今天遇到个小问题觉得挺有意思,与大家分享. 需求是这样的,对数据库中的一张表做按时间的分段统计,结果只要每个区间的数量. select YEAR(create_time) as nian,MONTH( ...
- Latex 分段函数
Latex里面分段函数的输入: \begin{equation} P_{r-j}= \begin{cases} 0&\mbox{if $r-j$ is odd}\\ ...
随机推荐
- 信息资源管理综合题之“SPD属于知识管理工具那一类 与 管理工具与知识库的区别 以及 使用知识地图是否可以用SynchroFLOW替代”
一.案例:1995年10月,微软开发了一项"技能规划与开发(SPD)"的计划,他们把每个系统开发人员的工作能力和这些特定工作需要的知识制作成地图,让那个员工与团队间的配合更加默契, ...
- Map延伸工具类之“根据value值得到map的key值”“根据value值得到map的keys值”
Map延伸工具类 /** * 集合类型转换 * */ public class CollectionUtil { /** * 根据value值得到map的key值 * @author wzw * * ...
- ASP.NET Core之由配置系统与创建app所想到的
先看文件配置的代码: ConfigurationBuilder configBuilder=new ConfigurationBuiler();//典型的创建者模式 configBuilder.Add ...
- B1051 复数乘法
描述 复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i^2=−1:也可以写成极坐标下的指数形式 (R×e(Pi) ),其中 R 是复数模,P 是辐角 ...
- codeup之A+B
Description 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开. 现在请计算A+B的结果,并以正常形式输出. Input 输入包含多组数据数据,每组 ...
- 「硬核科普」C++11锁机制三兄弟大比拼:mutex、lock_guard与unique_lock
大家好啊,我是小康.今天咱们聊点"家常"--那些让C++程序员又爱又恨的多线程同步工具! 如果你曾经被多线程搞得头大,或者听到"死锁"就心慌,那这篇文章就是为你 ...
- cf 870div2 abcd题解
A题,先假设一个res从0开始,判断说谎人的个数用ans表示,如果res==ans则假设成立 #include<iostream> using namespace std; typedef ...
- Linux命令之Telnet的使用方法
无论是linux还是windows,在命令行下,telnet命令都可以用于查看某个远端主机端口或者服务域名是否可以访问,语法糖如下: telnet IP 端口 telnet 域名 端口(即:telne ...
- 题解:CF1119D Frets On Fire
大水题. 首先,若区间内只有一根弦,不会对答案有贡献. 我们思考如何对答案产生贡献.我们知道,对于每一个 \(s_i\),都会产生一段 \(s_i+r-l\) 的连续序列,在对 \(s\) 数组排序后 ...
- 能够提升PHP页面加载速度的技巧
本文由 ChatMoney团队出品 1. 代码优化 1.1 减少复杂性 简化PHP代码可以显著提升执行速度.避免过多的嵌套循环和条件判断,尽量使用内置函数代替自定义函数,因为内置函数通常经过高度优化. ...