拓展kmp
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的更多相关文章
- hdu-4300(kmp或者拓展kmp)
题意:乱七八糟说了一大堆,就是先给你一个长度26的字符串,对应了abcd....xyz,这是一个密码表.然后给你一个字符串,这个字符串是不完整的(完整的应该是前半部分是加密的,后半部分是解密了的),然 ...
- hdu-4763(kmp+拓展kmp)
题意:给你一个串,问你满足最大字串既是前后缀,也在字符串除去前后缀的位置中出现过: 思路:我用的是拓展kmp求的前后缀,只用kmp也能解,在字符串2/3的位置后开始遍历,如果用一个maxx保存前2/3 ...
- poj-2752(拓展kmp)
题意:求一个串所有的前后缀字串: 解题思路:kmp和拓展kmp都行,个人感觉拓展kmp更裸一点: 拓展kmp: #include<iostream> #include<algorit ...
- hdu 4333"Revolving Digits"(KMP求字符串最小循环节+拓展KMP)
传送门 题意: 此题意很好理解,便不在此赘述: 题解: 解题思路:KMP求字符串最小循环节+拓展KMP ①首先,根据KMP求字符串最小循环节的算法求出字符串s的最小循环节的长度,记为 k: ②根据拓展 ...
- HDU 3613 Best Reward(拓展KMP算法求解)
题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. ...
- 拓展KMP算法详解
拓展KMP解决的问题是给两个串S和T,长度分别是n和m,求S的每一个后缀子串与T的最长公共前缀分别是多少,记作extend数组,也就是说extend[i]表示S[i,n-1](i从0开始)和T的最长公 ...
- KMP&拓展KMP
KMP算法 说明 KMP算法是一种比较高效的字符串匹配算法,可以在线性时间内求出一个串在另一个串的所有匹配位置. 解析 详解KMP 设模板串是 \(pattern\) 令 \(next[i] = ma ...
- Period II FZU - 1901(拓展kmp)
拓展kmp板题 emm...我比较懒 最后一个字母进了vector两个1 不想改了...就加了个去重... 哈哈 #include <iostream> #include <cst ...
- Simpsons’ Hidden Talents HDU - 2594(拓展kmp)
Sample Input clinton homer riemann marjorie Sample Output 0 rie 3 看输出才题意...拓展kmp特征很明显嘛....注意开始就匹配到尾的 ...
- Seek the Name, Seek the Fame POJ - 2752(拓展kmp || kmp)
题意: 就是求前缀和后缀相同的那个子串的长度 然后从小到大输出 解析: emm...网上都用kmp...我..用拓展kmp做的 这就是拓展kmp板题嘛... 求出extend数组后 把exten ...
随机推荐
- Python基础 - 逻辑运算符
Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20: 运算符 逻辑表达式 描述 实例 and x and y 布尔"与" - 如果 x 为 False,x a ...
- 代码随想录算法训练营Day18 二叉树| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
654.最大二叉树 题目链接:654.最大二叉树 给定一个不重复的整数数组 nums . 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值. 递归地 ...
- chrome 应用程序无法启动,因为应用程序的并行配置不正确
win10系统谷歌浏览器无法启动,系统报错,如下图: 解决方案: 步骤1:进入chrome的安装路径C:\Program Files (x86)\Google\Chrome\... ...(找到自己的 ...
- 每周更新 | Verilog测试用例及波形展示图功能上线
Hi,亲爱的技术伙伴,经过产研团队的努力,本周ShowMeBug有以下4个功能上线啦- 芯片语言 Verilog 支持测试用例 芯片语言 Verilog 支持测试用例,自动评分同步上线- 同时,Ver ...
- SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中
SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中 转载 首先我们应该知道我们把SPRINGBOOT项目打包成WAR包和 ...
- C#.NET Framework RSA 公钥加密 私钥解密 ver:20230609
C#.NET Framework RSA 公钥加密 私钥解密 ver:20230609 环境说明: .NET Framework 4.6 的控制台程序 . .NET Framework 对于RSA的支 ...
- Neo4J 图库的集群部署与基础使用
Ned4J 图库的集群部署与基础使用 部署机器 名称 配置 IP server1 8 核 16G 172.16.0.2 server2 8 核 16G 172.16.0.3 server3 8 核 1 ...
- 记一次 .NET 某旅行社审批系统 崩溃分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序跑着跑着就崩溃了,让我看下怎么回事,其实没怎么回事,抓它的 crash dump 就好,具体怎么抓也是被问到的一个高频问题,这里再补一下链接: ...
- 前端Vue图片上传组件支持单个文件多个文件上传 自定义上传数量 预览删除图片 图片压缩
前端Vue图片上传组件支持单个文件多个文件上传 自定义上传数量 预览删除图片 图片压缩, 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin? ...
- C++面试八股文:用过std::set/std::map吗?
某日二师兄参加XXX科技公司的C++工程师开发岗位第27面: 面试官:用过std::set/std::map吗? 二师兄:用过. 面试官:能介绍一下二者吗? 二师兄:std::set是一个有序的集合, ...