spoj LCS 【后缀自动机】
来源:互联网 发布:jquery latest.js cdn 编辑:程序博客网 时间:2024/05/16 06:43
琦不会后缀自动机……
是以前太浪了……
所以所有东西都留到了noi前来学……
马上狗牌退役了TAT(心塞qwq
题目大意:给出两个串A,B,求A、B的最长公共子串
对A建后缀自动机,然后用B去匹配,若能匹配上就转移到儿子,否则沿着parent树向上跳
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#define N 500005using namespace std;int n,m,last = 1,tot = 1,p,q,np,nq,ans;int son[N][26],par[N],mx[N];char a[N],b[N];int new_node(int x){ mx[++ tot] = x; return tot;}void add(int x){ p = last; np = new_node(mx[p] + 1); for (;p && !son[p][x];p = par[p]) son[p][x] = np; if (!p) par[np] = 1; else { q = son[p][x]; if (mx[q] == mx[p] + 1) par[np] = q; else { nq = new_node(mx[p] + 1); memcpy(son[nq],son[q],sizeof(son[nq])); par[nq] = par[q],par[q] = par[np] = nq; for (;son[p][x] == q;p = par[p]) son[p][x] = nq; } } last = np;}int main(){ scanf("%s%s",a + 1,b + 1); n = strlen(a + 1),m = strlen(b + 1); for (int i = 1;i <= n;i ++) add(a[i] - 'a'); for (int i = 1,p = 1,l = 0;i <= m;i ++) { int x = b[i] - 'a'; if (son[p][x]) l ++,p = son[p][x]; else { for (;p && !son[p][x];p = par[p]); if (!p) l = 0,p = 1; else l = mx[p] + 1,p = son[p][x]; } ans = max(ans,l); } cout << ans << endl; return 0;}
0 0
- SPOJ LCS --后缀自动机
- 【后缀自动机】 SPOJ LCS
- spoj LCS 【后缀自动机】
- SPOJ LCS(后缀自动机)
- 后缀自动机1001 SPOJ LCS
- spoj 1811 LCS 后缀自动机
- spoj 1811 LCS (后缀自动机 SAM)
- SPOJ 1811 LCS(后缀自动机)
- spoj/LCS 1811 小小后缀自动机
- SPOJ LCS Longest Common Substring 后缀自动机
- [SPOJ LCS]Longest Common Substring && 后缀自动机
- 【后缀自动机】[SPOJ LCS]Longest Common Substring
- SPOJ 1811(LCS) 后缀自动机
- spoj 1811 LCS - Longest Common Substring (后缀自动机)
- 【后缀自动机】SPOJ(LCS)[Longest Common Substring]题解
- SPOJ LCS 最长公共子串 后缀自动机&后缀树(Ukkonen)
- SPOJ LCS2 --后缀自动机
- SPOJ Substrings --后缀自动机
- Oculus Rift, HTC Vive, SONY PSVR的全面对比
- HDU 今年暑假不AC
- 扩展欧几里德算法解线性方程ax+by=c [模板]
- Cocos2d-x 综述——API 风格
- 中序后序,中序先序求二叉树
- spoj LCS 【后缀自动机】
- HDU2817 A sequence of numbers
- java并发常见问题
- Linux基础知识的学习(二)
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2) E DFS
- 线性磁带文件系统(LTFS)
- java反射一些方法
- CSV文件excel打开乱码问题
- Android Studio 如何使用AIDL