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. Kubernetes(k8s)一次性任务:Job

    目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.j ...

  2. 利用APIFOX对ABAP函数进行调用

    1.安装APIFOX,当然也可以使用在线版,无需下载 官网地址:https://apifox.com/ 2.新建项目 3.为项目起一个名称,为相关开发测试人员授权 4.在根目录新增子目录 5.编辑开发 ...

  3. NOIP2021游记

    前言: 今年我是以初中生的身份参加的 NOIP,不计奖,不排名,就去试试水. 考得也不好,幸好没计奖. 正文: 早上 7 点: 到LNBS,在旁边吃了早饭,很好吃. 早上 8 点: 校门口照相,然后进 ...

  4. ESP8266-01S烧录固件

    ESP8266-01S 整理了一下ESP01S的烧录固件和烧录APP 链接:https://pan.baidu.com/s/1DApOQcWhqvk378ZklJSypA 提取码:1028 文件夹包含 ...

  5. @Override注解的使用

    先看看@Override注解在Java SE中的声明: package .lang; import java.lang.annotation.*; @Target(ElementType.METHOD ...

  6. 衔尾法解决当无法使用空闲中断以及DMA中断时配置DMA接收串口不定长数据

    [Ooonly新人贴]记录工作中遇到的问题,话不多说先上干货 问题:类似K线与蓝牙接收部门模块,要求由原来的接收串口中断改为DMA接收.据说要用到空闲中断与DMA中断,但是经仿真发现DMA每完成传输一 ...

  7. Typora 主题Mo Dark 样式

    Mo Dark 主题样式 html { font-size: 16px; } /*加粗字体样式*/ strong { -webkit-background-clip: text; -webkit-te ...

  8. Python编程和数据科学中的人工智能:如何创建复杂的智能系统并提高模型性能

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 标题:<Python编程和数据科学中的人工智能:如何创建复杂的智能系统并提高模型性能> 1. 引 ...

  9. Terraform 系列-使用 for-each 对本地 json 进行迭代

    系列文章 Terraform 系列文章 Grafana 系列文章 概述 前文 Grafana 系列 - Grafana Terraform Provider 基础 介绍了使用 Grafana Terr ...

  10. React学习时,outlet 路由配置 (prop传参处理,跳转的实现,父子数据共享)

    index.js import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App' ...