【Codeforces 526D】Om Nom and Necklace
Codeforces 526 D
题意:给一个字符串,求每个前缀是否能表示成\(A+B+A+B+\dots+A\)(\(k\)个\(A+B\))的形式。
思路1:求出所有前缀的哈希值,以便求每个子串的哈希值。然后枚举\(A+B\)的长度,二分\(A\)的长度,用哈希检查一下字符串是否相等即可。
思路2:求出KMP的\(fail\)数组,然后枚举前缀的长度\(len\),看该前缀的最小循环节\(min=len-fail_{len}\)(因为\(A+B+A+B+\dots+A+B+A\)中前缀\(A+B+A+B+\dots+A\)与后缀相等,所以\(A+B\)的长度就是如此求出),
则\(|A+B|=q\times min\),
所以\(len=k\times|A+B|+|A|=k\times q\times min+x\ (0\leq x\leq q\times min)\)。
然后得\(k\times q\times min\leq len\leq (k+1)\times q\times min\)。
所以\(\frac{len}{(k+1)\times min}\leq q\leq \frac{len}{k\times min}\)
那么既然\(q\)为整数,则\(q\)在\([\lceil \frac{len}{(k+1)\times min}\rceil,\lfloor \frac{len}{k\times min}\rfloor]\)中。
进行判断即可。
思路3:同样求出KMP的\(fail\)数组。然后构建\(i\)跳转\(2^j\)次\(fail\)后得到的位置的倍增表,枚举前缀的长度\(len\)。
对于一个前缀,\(|A+B|\)最极端的情况是\(A\)为空或\(B\)为空,两种情况分别\(|A+B|\)为\(\frac{len}{k}\)和\(\frac{len}{k+1}\),所以可以求出\(|A+B|\)的范围。下面只要看通过倍增表是否能从\(len\)跳至\(len-|A+B|\)的范围即可。
思路4:\(Z\_Algorithm\)求出\(Z\)数组表示与前缀向后最长匹配长度,然后枚举\(|A+B|\),判断是否循环\(k\)次,再将最后一个\(A\)可取的最长长度通过\(Z\)数组算出,差分区间修改每一个前缀是否可以即可。
【Codeforces 526D】Om Nom and Necklace的更多相关文章
- Codeforces 526.D Om Nom and Necklace
D. Om Nom and Necklace time limit per test 1 second memory limit per test 256 megabytes input standa ...
- 【Henu ACM Round#16 F】Om Nom and Necklace
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀. 然后s其实就是pre[i]中 ...
- Codeforces 526D - Om Nom and Necklace 【KMP】
ZeptoLab Code Rush 2015 D. Om Nom and Necklace [题意] 给出一个字符串s,判断其各个前缀是否是 ABABA…ABA的形式(A和B都可以为空,且A有Q+1 ...
- Codeforces - ZeptoLab Code Rush 2015 - D. Om Nom and Necklace:字符串
D. Om Nom and Necklace time limit per test 1 second memory limit per test 256 megabytes input standa ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
随机推荐
- <a>标签里面直接嵌套图片,<img>下面出现一小段空白的原因
今天在写页面时,发现在a标签,里面嵌入<img>底部会出现空白的问题! 请看示例代码: <a style="border: 2px dashed blue"> ...
- 图的遍历(bfs+dfs)模板
bfs #include<iostream> #include<queue> #include<cstdio> using namespace std; queue ...
- python之初识函数
函数: 函数是对功能或动作的封装. 函数的语法和定义: def 函数名(): 函数体 调用函数: 函数名() 函数返回值: return : 返回 def yue(): print("拿出手 ...
- Ansible--配置文件及系列命令
Ansible目录结构 安装完成ansible后要知道ansible主要安装的了什么,安装的目录结构是什么,每个目录做什么的 可以使用:rpm -ql ansible | less 来查看ansibl ...
- loadrunner 脚本优化-加密与解密
脚本优化-加密与解密 by:授客 QQ:1033553122 密码加密 可以给密码加密,意在把结果字符串作为脚本的参数或者参数值.例如,完整可能有一个用户密码填写的表单,你想测试网站针对不同密码的 ...
- Android 震动模式
震动类 public class VibratorUtil { private static final long DEFAULT_VIBRATOR = 100; private static Vib ...
- 聊聊HTTP gzip压缩与常见的Android网络框架
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/5835990.html 进入主题之前,我们先来看一下客户端与服 ...
- 不使用JS实现表单验证
我们可以给表单元素添加required,pattern属性,还有根据具体元素类型决定的Measureable属性,如:min,max等. required:表示必填. pattern:一般用于type ...
- LeetCode题解之 Find Mode in Binary Search Tree
1.题目描述 2.问题分析 使用map记录元素出现的次数. 3.代码 vector<int> v; map<int,int> m; vector<int> find ...
- localStorage,sessionStorage的使用
最近因为项目上需要使用到客户端存储,所以稍微研究了一下,以下说说自己的理解和使用经验 1.调用方法相同 各自都包含以下几种操作: //根据key获取对应的值; window.sessionStorag ...