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. es笔记六之聚合操作之指标聚合

    本文首发于公众号:Hunter后端 原文链接:es笔记六之聚合操作之指标聚合 聚合操作,在 es 中的聚合可以分为大概四种聚合: bucketing(桶聚合) mertic(指标聚合) matrix( ...

  2. C# EFCore 根据Oracle/SqlServer数据库表生成实体类和DbContext

    官方文档: https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/scaffolding?tabs=dotnet-core-cli 本文以 ...

  3. 如何开启Apache SkyWalking的自监控?

    1. 开启Prometheus遥测数据 默认情况下, 遥测功能(telemetry)是关闭的(selector 为 none),像这样: telemetry: selector: ${SW_TELEM ...

  4. aspnetcore最最简单的接口权限认证

    五月一眨眼就过去,就当凑个数吧. 场景: 一个小小的项目,需要一个后台,就展示几个列表,连用户表.角色表等都不需要设计. 之前有写过identityserver4和jwt4的demo (exercis ...

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

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

  6. Galaxy Release 20.05 发布,新增多项可视化体验

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

  7. tryhackme-OWASP

    tryhackme-OWASP Top 10部分记录 敏感信息泄露 在assets目录中 可以看到到一个sqlite数据库的webapp.db文件 使用sqlite3 webapp.db .table ...

  8. WPF中控件转命令

    WPF不是所有控件都有Command属性,如果窗体需要在ViewModel 使用System.Windows.Interactivity事件 在nuget浏览搜索 下载System.Windows.I ...

  9. 【技术积累】JavaSciprt中的函数【一】

    什么是函数?如何声明函数? JavaScript中的函数是一段可重复使用的代码块,它可以接受输入并返回输出. 在JavaScript中,函数是一种特殊的对象,因此可以将其存储在变量中,将其作为参数传递 ...

  10. 大语言模型的开发利器langchain

    目录 简介 什么是langchain langchain的安装 langchain快速使用 构建应用 聊天模式 Prompt的模板 Chains Agents Memory 总结 简介 最近随着cha ...