正题

评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P3435


大意

一个字符串,对于每个前缀,求复制一份放在末尾可以覆盖整个前缀的前缀,求所有的长度和。


解题思路

这道题如果暴力的话很简单,对于每个前缀每次往前跳,如果不可以覆盖了就下一个。
但是这样会被卡成O(n2)O(n2)O(n^2)
所有我们可以加一个优化,我们找一个最短的,然后总长度减去最短的就是最长的。我们就可以每次改变next的值,让他直接指向最短的,然后就可以O(n)O(n)O(n)解决问题


code

#include<cstdio>
using namespace std;
int n,next[1000011];
char s[1000011];
long long ans;
int main()
{scanf("%d",&n);scanf("%s",s);for(int i=1,j=0;i<n;i++){while(j&&(s[i]!=s[j])) j=next[j];j+=(s[i]==s[j]);next[i+1]=j;}//匹配指针int j;for(int i=1;i<=n;i++){j=i;while(next[j]) j=next[j];//跳转if(next[i]!=0)next[i]=j;//记忆化ans+=i-j;//统计答案}printf("%lld",ans);
}

P3435-[POI2006]OKR-Periods of Words【KMP】相关推荐

  1. 【KMP】Radio Transmission(最小循环子串)

    [KMP]Radio Transmission(最小循环子串) Description 给你一个字符串,它是由某个字符串不断自我连接形成的.但是这个字符串是不确定的,现在只想知道它的最短长度是多少. ...

  2. 【KMP】OKR-Periods of Words

    [KMP]OKR-Periods of Words 题目描述 串是有限个小写字符的序列,特别的,一个空序列也可以是一个串.一个串P是串A的前缀,当且仅当存在串B,使得A=PB.如果P≠A并且P不是一个 ...

  3. 【kmp】似乎在梦中见过的样子

    参考博客: BZOJ 3620: 似乎在梦中见过的样子 [KMP]似乎在梦中见过的样子 题目描述 「Madoka,不要相信QB!」伴随着Homura的失望地喊叫,Madoka与QB签订了契约. 这是M ...

  4. ACM入门之【KMP】

    KMP可以O(n)的时间查找出一个字符串在另一个字符串出现的次数和位置. KMP 的精髓在于,对于每次失配之后,我都不会从头重新开始枚举,而是根据我已经得知的数据,从某个特定的位置开始匹配:而对于模式 ...

  5. 【bzoj3620】【似乎在梦中见过的样子】【kmp】

    Description "Madoka,不要相信 QB!"伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回 ...

  6. 【KMP】从原理上详解next数组和nextval数组

    本文将从原理上详细解释KMP算法中的next数组以及nextval数组,尽量让大家明白它们到底在记录什么,为什么要这样算.以及现在普遍的KMP算法实现当中的next数组与前两者有何不同.篇幅较长,但尽 ...

  7. [NOI2014]动物园 【kmp】

    题目描述 每次写kmp都要调一万年 这题主要两个数组next[]next[]和num[]num[] num[i]num[i]表示以ii结尾的前缀所能匹配的数量(可重叠的) 代码 #include< ...

  8. [BZOJ 3942] [Usaco2015 Feb] Censoring 【KMP】

    题目链接:BZOJ - 3942 题目分析 我们发现,删掉一段 T 之后,被删除的部分前面的一段可能和后面的一段连接起来出现新的 T . 所以我们删掉一段 T 之后应该接着被删除的位置之前的继续向后匹 ...

  9. 【SDOI2017】硬币游戏【KMP】【概率期望】【高斯消元】

    题意:给 nnn 个长度为 mmm 的 01 串,一个 01 串初始为空,不断随机一个字符加在后面,当出现给定的 nnn 个串中的一个时停止.分别求在 nnn 个串处停止的概率. 考场思路历程: 显然 ...

  10. 【CF1200E】Compress Words【kmp】

    传送门 题意:给NNN个由大小写字母.数字组成的字符串,两个字符串S,TS,TS,T合并时,删除TTT最长的是SSS的后缀的前缀,然后接在一起.现将这些字符串依次合并,求最终字符串. N≤1e5,∑∣ ...

最新文章

  1. bae java_有人在BAE开发过java-tomcat应用吗?数据库老是链接失败
  2. 两台虚拟机ping不通问题
  3. Android 动画机制与使用技巧
  4. .html?t=1a=2类似传递参数到flex中
  5. jekenis父子结构项目打包_自动打包机的型号怎么选择?自动打包机型号选择须知...
  6. git提取和拉取的区别_git fetch和git pull的区别
  7. 互联网基建成果,快速实现一个clubhouse要多久
  8. 防火墙配置文件iptables详解
  9. CUDNN学习笔记(1)
  10. MATLAB的简单动画制作
  11. 三星android智能手机usb驱动程序,三星手机驱动官方下载
  12. 命令行启动mysql闪退
  13. 4-google translate插件安装及使用
  14. windows修改mysql密码
  15. freeswitch拨打分机号源代码跟踪
  16. 如何蒸出白白胖胖的馒头
  17. 常见的 vue elementUI el的标签总结
  18. React Native 二 常用组件与开源组件
  19. Apache的Order Allow,Deny 详解
  20. 自动解锁Bitlocker加密硬盘

热门文章

  1. linux 取消证书登录密码,SUSELinux 中为 SSH 访问设置不输入密码的证书认证登录方式...
  2. 开启php的文件上传扩展,linux中如何通过php.ini添加扩展?
  3. cta策略 有哪些_CTA 主流的交易策略都有哪些?
  4. python变量类型怎么决定的_Python数据类型提示痛点的解决方案探讨
  5. java实用教程——组件及事件处理——布局的一个小实例
  6. java pc计数器_java虚拟机-程序计数器PC Register
  7. 每天一小时python官方文档学习(二)————流程控制工具
  8. 蓝桥杯2017初赛-外星日历-数论
  9. 写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)
  10. mysql 2008 日_SQL2008 的 日期数据类型