Smiling & Weeping

                ---- 我从不觉得暗恋是苦涩的,

                  对一个人的喜欢藏在眼睛里,

                      透过它,

                   世界都变得更好看了。

题目:P5410 【模板】扩展 KMP(Z 函数) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

简介:拓展kmp是这样的一个问题:给定一个长度为n的字符串S,一个长度为m的模式串,求P和S的每个后缀的最长公共前缀

推荐思路理解:P5410 【模板】扩展 KMP(Z 函数) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

Talk is cheap , show me the code

 1 #include<bits/stdc++.h>
2 using namespace std;
3 // 开long long
4 typedef long long ll;
5 char s[20001000] , t[20001000];
6 ll Next[20001000] , ext[20001000];
7 void getNext(char *c){
8 int len = strlen(c);
9 int p=0 , k=1 , l;
10 Next[0] = len; // 完全重合
11 while(p+1 < len && c[p] == c[p+1]) p++;
12 Next[1] = p;
13 for(int i = 2; i < len; i++){
14 p = k+Next[k]-1; // 前缀最远能到达的距离
15 l = Next[i-k]; // 在i-k开始的LCP
16 if(i+l <= p) Next[i] = l; // 没有超过最长的前缀到达距离
17 else{ // 超过了
18 int j = max(0 , p-i+1);
19 while(i+j < len && c[i+j] == c[j]) j++;
20 k = i;
21 Next[i] = j;
22 }
23 }
24 }
25 void extkmp(char *a , char *b){
26 int la = strlen(a) , lb = strlen(b);
27 int p=0 , k=0 , l;
28 while(p < la && p < lb && a[p] == b[p]) p++;
29 ext[0] = p;
30 for(int i = 1; i < la; i++){
31 p = k+ext[k]-1;
32 l = Next[i-k];
33 if(i+l <= p) ext[i] = l;
34 else{
35 int j = max(0 , p-i+1);
36 while(i+j < la && j < lb && a[i+j] == b[j]) j++;
37 ext[i] = j;
38 k = i;
39 }
40 }
41 }
42 int main()
43 {
44 scanf("%s",s); scanf("%s",t);
45 getNext(t);
46 extkmp(s,t);
47 ll ans=0;
48 for(int i = 0; i < strlen(t); i++)
49 ans ^= (i+1)*(Next[i]+1);
50 printf("%lld\n",ans);
51 ans = 0;
52 for(int i = 0; i < strlen(s); i++)
53 ans ^= (i+1)*(ext[i]+1);
54 printf("%lld\n",ans);
55 return 0;
56 }

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

拓展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. Galaxy Release 20.05 发布,新增多项可视化体验

    Galaxy Project(https://galaxyproject.org/)是在云计算背景下诞生的一个生物信息学可视化分析开源项目. 该项目由美国国家科学基金会(NSF).美国国家人类基因组研 ...

  2. 20230611 再次升级SSD

    家里常用电脑的硬盘又显得捉襟见肘,老规矩,升级SSD.幸亏几年前摸索的方法记录下来了,翻出以前的博客复习一下.为了保险起见,也重新在网上搜了一下,看是不是有新的更方便的方法,答案是没有,只是搜出很多推 ...

  3. 2023-06-20:给定一个长度为N的数组arr,arr[i]表示宝石的价值 你在某天遇到X价值的宝石, X价值如果是所有剩余宝石价值中的最小值,你会将该宝石送人 X价值如果不是所有剩余宝石价值中的

    2023-06-20:给定一个长度为N的数组arr,arr[i]表示宝石的价值 你在某天遇到X价值的宝石, X价值如果是所有剩余宝石价值中的最小值,你会将该宝石送人 X价值如果不是所有剩余宝石价值中的 ...

  4. 14. SpringMVC执行流程

    14.1.SpringMVC 常用组件 DispatcherServlet:前端控制器,不需要工程师开发,由框架提供 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求 Ha ...

  5. HCL实验:3.两台PC通过路由器交换机PING通

    拓扑图 路由器配置网关 PC1 ping PC2, PC3

  6. 深度学习(四)——torchvision中数据集的使用

    一. 科研数据集 下载链接: https://pytorch.org/vision/stable/index.html 本文中我们使用的是\(CIFAR\)数据集 二.CIFAR10数据集详解 具体网 ...

  7. python(django启动报错,之编码问题)UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte

  8. 打造原生 WebGL 2D 引擎:一场创意与技术的融合

    打造原生 WebGL 2D 引擎:一场创意与技术的融合 1.引言 在当今数字化时代,网页的功能越来越丰富,已经远远超越了传统的文本和图片呈现.我们生活在一个充满交互性和视觉魅力的网络世界.每天都会遇到 ...

  9. Unity UGUI的Outline(描边)组件的介绍及使用

    Unity UGUI的Outline(描边)组件的介绍及使用 1. 什么是Outline(描边)组件? Outline(描边)组件是Unity UGUI中的一种特效组件,用于给UI元素添加描边效果.通 ...

  10. tcpdump抓指定端口/ip的数据包

    抓指定端口,这里以7070端口为例 tcpdump -i ens192 port 7070 -s 0 -l -A -w /chris/70.pcap ens192是网卡  抓完ctrl c停止 抓指定 ...