后缀自动机裸题

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i<=k;--i)
#define inf 0x3f3f3f3f
#define ll long long
#define maxn 200005 struct sam{
char s[maxn];
int h[maxn],to[maxn],ne[maxn],en,ttt;
int dp[maxn][10],n;
int last,cnt,len,lth;
int go[maxn][26],l[maxn],fa[maxn];
void addedge(int a,int b)
{to[en]=b;ne[en]=h[a];h[a]=en++;}
void init()
{
memset(h,-1,sizeof h);en=0;
last=cnt=1;
// memset(go,0,sizeof go);
// memset(dp,0,sizeof dp);
}
void add(int x)
{
// printf("add %d\n",x);
int p=last,np=last=++cnt; l[np]=l[p]+1;
// printf("on point %d\n",np);
for (;p&&!go[p][x];p=fa[p]) go[p][x]=np;
if (!p) fa[np]=1;
else
{
int q=go[p][x];
if (l[q]==l[p]+1) fa[np]=q;
else
{
int nq=++cnt;
l[nq]=l[p]+1;
memcpy(go[nq],go[q],sizeof go[q]);
fa[nq]=fa[q];
fa[np]=fa[q]=nq;
for (;p&&go[p][x]==q;p=fa[p]) go[p][x]=nq;
}
}
}
void dfs(int o)
{
for (int i=h[o];i>=0;i=ne[i])
{
dfs(to[i]);
F(j,1,ttt)
dp[o][j]=max(dp[o][j],dp[to[i]][j]);
}
}
void solve()
{
scanf("%d",&n);
scanf("%s",s+1);
lth=len=strlen(s+1);
F(i,1,lth) add(s[i]-'a');
int i=0;
while (scanf("%s",s+1)!=EOF)
{
++i;
// scanf("%s",s+1);
len=strlen(s+1);
int now=1,t=0;
F(j,1,len)
{
int x=s[j]-'a';
if (go[now][x]) {t++;now=go[now][x];}
else
{
while (now&&!go[now][x]) now=fa[now];
if (!now) {t=0;now=1;}
else t=l[now]+1,now=go[now][x];
}
dp[now][i]=max(dp[now][i],t);
// for (int k=now;k;k=fa[k]) dp[k][i]=max(dp[k][i],t);
}
}
dfs(1);
int ans=0;ttt=i;
F(i,1,cnt) addedge(fa[i],i);
F(i,1,cnt)
{
int tmp=l[i];
F(j,2,ttt)
tmp=min(tmp,dp[i][j]);
ans=max(ans,tmp);
}
printf("%d\n",ans);
}
}SAM; int main()
{
SAM.init();
SAM.solve();
}

  

最新文章

  1. JavaScript事件概览
  2. css动画
  3. iOS开发——网络篇——NSURLSession,下载、上传代理方法,利用NSURLSession断点下载,AFN基本使用,网络检测,NSURLConnection补充
  4. Codeforces Round #379 (Div. 2) A. Anton and Danik 水题
  5. install Matlab2016b on Ubuntu 14.04
  6. 关于http响应内容压缩的一点小积累。
  7. Bmob—移动后端云服务平台
  8. Chapter 1 First Sight——9
  9. Linux - 进程调度算法
  10. mongodb一些使用技巧或注意事项记录
  11. 数组Array、数组API
  12. HashSet实现不重复储值原理-附源码解析
  13. 项目Alpha冲刺Day12
  14. springboot之scheduled任务调度
  15. HDU1711-KMP-水题
  16. [POI2018]Pionek
  17. mysql常用反斜杠命令
  18. C# to IL 12 Arrays(数组)
  19. 自己电脑能ping别人的,但别人电脑去不能跟我们的电脑通信
  20. linux -- Ubuntu Server 安装图形界面

热门文章

  1. eclipse的hadoop插件对集群操作提示org.apache.hadoop.security.AccessControlException:Permission denied
  2. ios invalid put policy encoding 七牛上传报错
  3. App Store中的开源游戏汇总
  4. [BZOJ2938]病毒 (AC自动机+dfs)
  5. mysql启动提示mysql.host 不存在,启动失败的解决方法
  6. Java创建图片文件缩略图
  7. metasploit-shellcode生成
  8. iOS HmacSHA1加密 和 MD5 Base64加密 --iOS开发系列---项目中成长的知识五
  9. Leetcode 71 简化路径simplify-path(栈)
  10. Java--返回类的对象(return this)