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的更多相关文章

  1. 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 ...

  2. 【Henu ACM Round#16 F】Om Nom and Necklace

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀. 然后s其实就是pre[i]中 ...

  3. Codeforces 526D - Om Nom and Necklace 【KMP】

    ZeptoLab Code Rush 2015 D. Om Nom and Necklace [题意] 给出一个字符串s,判断其各个前缀是否是 ABABA…ABA的形式(A和B都可以为空,且A有Q+1 ...

  4. 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 ...

  5. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  6. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  7. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  8. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  9. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

随机推荐

  1. <a>标签里面直接嵌套图片,<img>下面出现一小段空白的原因

    今天在写页面时,发现在a标签,里面嵌入<img>底部会出现空白的问题! 请看示例代码: <a style="border: 2px dashed blue"> ...

  2. 图的遍历(bfs+dfs)模板

    bfs #include<iostream> #include<queue> #include<cstdio> using namespace std; queue ...

  3. python之初识函数

    函数: 函数是对功能或动作的封装. 函数的语法和定义: def 函数名(): 函数体 调用函数: 函数名() 函数返回值: return : 返回 def yue(): print("拿出手 ...

  4. Ansible--配置文件及系列命令

    Ansible目录结构 安装完成ansible后要知道ansible主要安装的了什么,安装的目录结构是什么,每个目录做什么的 可以使用:rpm -ql ansible | less 来查看ansibl ...

  5. loadrunner 脚本优化-加密与解密

    脚本优化-加密与解密 by:授客 QQ:1033553122   密码加密 可以给密码加密,意在把结果字符串作为脚本的参数或者参数值.例如,完整可能有一个用户密码填写的表单,你想测试网站针对不同密码的 ...

  6. Android 震动模式

    震动类 public class VibratorUtil { private static final long DEFAULT_VIBRATOR = 100; private static Vib ...

  7. 聊聊HTTP gzip压缩与常见的Android网络框架

    版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/5835990.html 进入主题之前,我们先来看一下客户端与服 ...

  8. 不使用JS实现表单验证

    我们可以给表单元素添加required,pattern属性,还有根据具体元素类型决定的Measureable属性,如:min,max等. required:表示必填. pattern:一般用于type ...

  9. LeetCode题解之 Find Mode in Binary Search Tree

    1.题目描述 2.问题分析 使用map记录元素出现的次数. 3.代码 vector<int> v; map<int,int> m; vector<int> find ...

  10. localStorage,sessionStorage的使用

    最近因为项目上需要使用到客户端存储,所以稍微研究了一下,以下说说自己的理解和使用经验 1.调用方法相同 各自都包含以下几种操作: //根据key获取对应的值; window.sessionStorag ...