poj 1743 Musical Theme【后缀自动机】
2016-07-14 23:35
309 查看
题目大意:给定一个串,求最长的两个子串,满足互不相交且一个串可以通过整体加上另一个数变成另一个串
先差分,然后就是找两个相同的不相交的串,考虑对于每个点,记录它的right集的最值,差值就是子串长度。取个max就好
先差分,然后就是找两个相同的不相交的串,考虑对于每个点,记录它的right集的最值,差值就是子串长度。取个max就好
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #define N 40005 #define INF 1000000000 using namespace std; int n,m,last,tot,p,q,np,nq,ans; int l ,r ,P ,sm ;; int son [180],par ,mx ; int s ; int new_node(int x) { mx[++ tot] = x; return tot; } void add(int x) { p = last; np = new_node(mx[p] + 1);l[np] = r[np] = mx[np]; 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);l[nq] = 1e9,r[nq] = 0; 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() { while (~scanf("%d",&n) && n) { memset(son,0,sizeof(son));last = tot = 1; memset(sm,0,sizeof(sm));ans = 0; for (int i = 1;i <= n;i ++) scanf("%d",&s[i]); for (int i = 1;i < n;i ++) s[i] = s[i + 1] - s[i] + 88;n --; for (int i = 1;i <= n;i ++) add(s[i]); for (int i = 1;i <= tot;i ++) sm[mx[i]] ++; for (int i = 1;i <= n;i ++) sm[i] += sm[i - 1]; for (int i = 1;i <= tot;i ++) P[sm[mx[i]] --] = i; for (int i = tot;i > 1;i --) { int x = P[i]; l[par[x]] = min(l[par[x]],l[x]); r[par[x]] = max(r[par[x]],r[x]); } for (int i = 2;i <= tot;i ++) ans = max(ans,min(r[i] - l[i],mx[i])); cout << (ans < 4 ? 0 : ans + 1) << endl; } return 0; }
相关文章推荐
- STL空间配置器
- 触控两点,onTouchEvent
- 点击Ajax.Action生成的链接后,没有启用ajax请求,而是普通超链接的效果
- List,Set,Map用法以及区别
- 进老男孩的自我介绍和决心书
- [安卓开发]解决popupWindow重叠报错问题
- RedHat6.2 下RRDTool安装方法
- Python笔记(3)迭代器与生成器
- Redis概述
- jquery ajax error函数和参数说明
- 为什么年轻人喜欢北上广? 因为这里点燃改变世界的梦想!
- 欢迎使用CSDN-markdown编辑器
- Android Studio下的"数字签名"
- rpm
- android图片处理方法(不断收集中)
- 在window平台如何搭建Java开发环境
- 聊聊C/C++要过的桥
- not-null property references a null or transient value: 等关于cinema项目bug
- eclipse上的git命令使用浅析,搭建Maven项目
- 《javascript权威指南》读书笔记——第二篇