Smiling & Weeping

                ---- 我与月亮,进行了一次深夜谈话

                  它与我谈论太阳,而我与它谈论你。

题目链接:P3435 [POI2006] OKR-Periods of Words - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:其实也就是kmp拓展,求s与s的每个后缀的LCP(最长公共前缀),但是这样超时,需要一个小小的优化(记录跳转即step[k],跳到可以上一个可以实现的地方,尽量保持复杂度在线性),同时s[i] == s[0]时,直接使ans += i;

Talk is cheap , show me the code

 1 #include<bits/stdc++.h>
2 using namespace std;
3 int n , Next[1000100] , step[1000100];
4 char str[1000100];
5 void getNext(char *c){
6 int len = strlen(c);
7 int p = 0 , k = 1 , l;
8 Next[0] = len;
9 while(p+1 < len && c[p] == c[p+1]) p++;
10 Next[1] = p;
11 for(int i = 2; i < len; i++){
12 p = k+Next[k]-1;
13 l = Next[i-k];
14 if(i+l <= p) Next[i] = l;
15 else{
16 int j = max(0 , p-i+1);
17 while(i+j < len && c[i+j] == c[j]) j++;
18 Next[i] = j;
19 k = i;
20 }
21 }
22 }
23 int main()
24 {
25 long long ans = 0;
26 int q=0 , k; // q代表周期,k代表最远到达的距离
27 scanf("%d",&n); scanf("%s",str);
28 getNext(str);
29 for(int i = 1; i < n; i++){
30 if(str[i] == str[0]){
31 ans += i;
32 } else {
33 int r = i-1 , tem = r;
34 while(Next[r] < i-r+1 && r >= (i+1)/2){
35 if(step[r] && step[r] < r) // 警惕bug,可能有step[r]==r,陷入死循环
36 r = step[r];
37 else r--;
38 }
39 if(r >= (i+1)/2 && Next[r] >= i-r+1) ans += r;
40 step[tem] = r;
41 }
42 }
43 printf("%lld\n",ans);
44 return 0;
45 }

一棵树,一块岩石,一朵云

文章到此结束,我们下次再见

拓展kmp的应用的更多相关文章

  1. hdu-4300(kmp或者拓展kmp)

    题意:乱七八糟说了一大堆,就是先给你一个长度26的字符串,对应了abcd....xyz,这是一个密码表.然后给你一个字符串,这个字符串是不完整的(完整的应该是前半部分是加密的,后半部分是解密了的),然 ...

  2. hdu-4763(kmp+拓展kmp)

    题意:给你一个串,问你满足最大字串既是前后缀,也在字符串除去前后缀的位置中出现过: 思路:我用的是拓展kmp求的前后缀,只用kmp也能解,在字符串2/3的位置后开始遍历,如果用一个maxx保存前2/3 ...

  3. poj-2752(拓展kmp)

    题意:求一个串所有的前后缀字串: 解题思路:kmp和拓展kmp都行,个人感觉拓展kmp更裸一点: 拓展kmp: #include<iostream> #include<algorit ...

  4. hdu 4333"Revolving Digits"(KMP求字符串最小循环节+拓展KMP)

    传送门 题意: 此题意很好理解,便不在此赘述: 题解: 解题思路:KMP求字符串最小循环节+拓展KMP ①首先,根据KMP求字符串最小循环节的算法求出字符串s的最小循环节的长度,记为 k: ②根据拓展 ...

  5. HDU 3613 Best Reward(拓展KMP算法求解)

    题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. ...

  6. 拓展KMP算法详解

    拓展KMP解决的问题是给两个串S和T,长度分别是n和m,求S的每一个后缀子串与T的最长公共前缀分别是多少,记作extend数组,也就是说extend[i]表示S[i,n-1](i从0开始)和T的最长公 ...

  7. KMP&拓展KMP

    KMP算法 说明 KMP算法是一种比较高效的字符串匹配算法,可以在线性时间内求出一个串在另一个串的所有匹配位置. 解析 详解KMP 设模板串是 \(pattern\) 令 \(next[i] = ma ...

  8. Period II FZU - 1901(拓展kmp)

    拓展kmp板题 emm...我比较懒 最后一个字母进了vector两个1  不想改了...就加了个去重... 哈哈 #include <iostream> #include <cst ...

  9. Simpsons’ Hidden Talents HDU - 2594(拓展kmp)

    Sample Input clinton homer riemann marjorie Sample Output 0 rie 3 看输出才题意...拓展kmp特征很明显嘛....注意开始就匹配到尾的 ...

  10. Seek the Name, Seek the Fame POJ - 2752(拓展kmp || kmp)

    题意: 就是求前缀和后缀相同的那个子串的长度  然后从小到大输出 解析: emm...网上都用kmp...我..用拓展kmp做的  这就是拓展kmp板题嘛... 求出extend数组后  把exten ...

随机推荐

  1. 【Haxe】(一)VSCode 搭建 Haxe 开发环境

    前言 咱换工作啦! 新工作这边需要用到的开发语言是 Haxe,最近大概会写几篇笔记.Haxe 的介绍就不写了,打算记录点有用的学习内容,先从搭建开发环境开始吧! 当前适用版本: VSCode:Curr ...

  2. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-2-playwright的API及其他知识

    1.简介 上一篇宏哥已经将Python+Playwright的环境搭建好了,而且也简单的演示了一下三款浏览器的启动和关闭,是不是很简单啊.今天主要是把一篇的中的代码进行一次详细的注释,然后说一下pla ...

  3. 使用RSS打造你的科研资讯头条

    本文章为 "生信草堂" 首发,经生信草堂授权.原作者(Steven Shen)同意转载.由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访 ...

  4. JavaWeb入门必备JavaEE规范!

    前言 对于学习 Java 的同学,大都是 Web 方向的.我们学习 JavaWeb 开发肯定是一个循序渐进的过程,学习前有一些前置知识要掌握,比如 JavaSE 相关知识,HTML.CSS.JavaS ...

  5. CANoe学习笔记(一):创建第一个仿真工程(基于CAN):点灯

    目录 内容: ①创建两个节点,Switch和Light节点 ②创建两个Panel界面 ③capl代码实现Switch控制Light亮灭 事先准备: 养成良好的习惯,将不同文件放入不同文件夹,创建如下几 ...

  6. ChatGPT使用案例,助你快速上手,做事事半功倍

    ChatGPT介绍 首先我们来看一下chat-gpt自己的介绍: ChatGPT的发展历程 2015年,OpenAI成立,致力于研究和开发人工智能技术.在成立初期,OpenAI的创始人之一Elon M ...

  7. 基于ChatGPT函数调用来实现C#本地函数逻辑链式调用助力大模型落地

    6 月 13 日 OpenAI 官网突然发布了重磅的 ChatGPT 更新,我相信大家都看到了 ,除了调用降本和增加更长的上下文版本外,开发者们最关心的应该还是新的函数调用能力.通过这项能力模型在需要 ...

  8. 《HelloGitHub》第 87 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  9. Dlang 并行化

    Dlang 并行化 好难受,dlang 生态太差,没办法,学了半天才明白. 我尽量以精炼的语言解释. 采用 定义,例子(代码),解释 的步骤讲解. 所以你可能看到很多代码,一点解释-- 我会省略一些 ...

  10. .NetCore3.1+微服务架构技术栈

    目标 目标系统架构演变,单体-分布式-微服务-中台 微服务架构核心解决,横向对比1.0.2.0.3.0 践行微服务架构,全组件解读! 也谈中台 单体架构Monolithic 单体应用时代:应用程序就是 ...