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. Ajax实现的城市二级联动三

    把之前2篇整合在一起 1.html <select id="province"> <option>请选择</option> </selec ...

  2. js之选项卡(tag标签)

    目标效果:点击不同按钮显示不同内容 代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  3. Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题

    最近在移植网络摄像机里的p2p库到android平台,需要用到jni,最近在c线程了调用java函数的时候 出现一个问题,假如在同一个线程调用java函数是没问题的,但在一个c线程了调用java函数就 ...

  4. SG Input 软件安全分析之逆向分析

    前言 通过本文介绍怎么对一个 windows 程序进行安全分析.分析的软件版本为 2018-10-9 , 所有相关文件的链接 链接:https://pan.baidu.com/s/1l6BuuL-HP ...

  5. OneAPM大讲堂 | 基于图像质量分析的摄像头监控系统的实现

    今天咱们要介绍的技术很简单,请看场景: 你在家里安装了几个摄像头想监视你家喵星人的一举一动,然而,就在喵星人准备对你的新包发动攻击的时候,图像突然模糊了.毕竟图像模糊了以后你就没法截图回家和喵当面对质 ...

  6. Luncene介绍

    1.Luncene介绍 案例:实现一个文件的搜索功能,通过关键字搜索文件,凡是文件名或文件内容包括关键字文件都需要找出来.还可以根据中文词语进行查询,并且需要支持多个条件查询.Lucene可以解决 数 ...

  7. 通过日志过滤的方法,统计每天内容详情页面的PV数

    1.目的: 每天凌晨0点1分统计用户点击进入内容详情页的次数,对内容点击量形成榜单. 2.分析: A./data/log/epg.access.log日志实时打印用户访问页面的日志,并且每天凌晨0点会 ...

  8. bootstrap-select插件 多选框

    HeBeiTianQi.jsp页面 1 <!--bootstrap-select .css引用--> 2 <link rel="stylesheet" href= ...

  9. Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)【转】

    Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在include/linux/sched.h文件中. 谈到task_str ...

  10. JQuery实现1024小游戏

    最近用Jqery写了一个1024小游戏,由于是第一次写小游戏,所以就选了一个基础的没什么难度游戏.具体实现如下: 首先在开发时将整个游戏分成两层(自认为),底层是游戏的数据结构以及对数据的操作,上层是 ...