博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 4032 [HEOI2015]最短不公共子串——后缀自动机
阅读量:6208 次
发布时间:2019-06-21

本文共 1762 字,大约阅读时间需要 5 分钟。

题目:

不是 b 的子串的话就对 b 建后缀自动机,在 a 上枚举从每个位置开始的子串或者找子序列(子序列就是记录 a 的前 i 个,走到 b 的 j 状态用的最短长度),对应到自动机上看看能不能走下去就行了。

不是 b 的子序列的话就对 b 建子序列自动机?就是那个知道每个位置再填一个字符会走到哪个位置的数组。然后在 a 上枚举,看看自动机上能不能走下去就行了。

#include
#include
#include
using namespace std;const int N=2005,M=4005,K=30;char a[N],b[N];int n,m,cnt=1,lst=1,go[M][K],fa[M],l[M],nxt[N][K],lt[K];int dp[N][M];//M//intint Mn(int a,int b){
return a
n?-1:ans);}void solve2(){ int ans=n+1; for(int t=1;t<=n;t++) { int cr=0; for(int i=t;i<=n;i++) { int d=a[i]-'a'+1; if(nxt[cr][d])cr=nxt[cr][d]; else {ans=Mn(ans,i-t+1);break;} } } printf("%d\n",ans>n?-1:ans);}void solve3(){ memset(dp,0x3f,sizeof dp); dp[0][1]=0; int ans=n+1; for(int i=1;i<=n;i++) { int d=a[i]-'a'+1; for(int j=1;j<=cnt;j++) if(dp[i-1][j]<=n) { dp[i][j]=Mn(dp[i][j],dp[i-1][j]); if(!go[j][d])ans=Mn(ans,dp[i-1][j]+1); else dp[i][go[j][d]]=Mn(dp[i][go[j][d]],dp[i-1][j]+1); } } printf("%d\n",ans>n?-1:ans);}void solve4(){ memset(dp,0x3f,sizeof dp); dp[0][0]=0; int ans=n+1; for(int i=1;i<=n;i++) { int d=a[i]-'a'+1; for(int j=0;j<=m;j++) if(dp[i-1][j]<=n) { dp[i][j]=Mn(dp[i][j],dp[i-1][j]); if(!nxt[j][d])ans=Mn(ans,dp[i-1][j]+1); else dp[i][nxt[j][d]]=Mn(dp[i][nxt[j][d]],dp[i-1][j]+1); } } printf("%d\n",ans>n?-1:ans);}int main(){ scanf("%s",a+1);scanf("%s",b+1); n=strlen(a+1);m=strlen(b+1); for(int i=1;i<=m;i++)add(b[i]-'a'+1); for(int i=m;i>=0;i--) { for(int j=1;j<=26;j++) nxt[i][j]=lt[j]; lt[b[i]-'a'+1]=i; } solve1();solve2(); solve3();solve4(); return 0;}

 

转载于:https://www.cnblogs.com/Narh/p/10108182.html

你可能感兴趣的文章
Struts2国际化
查看>>
江西理工大学南昌校区cool code竞赛
查看>>
循环Map方法
查看>>
nib和xib的区别
查看>>
== 和 is 的区别
查看>>
Selenium2Library+ride学习笔记
查看>>
OSPF RFC2740
查看>>
OBJECT_ID()的使用方法
查看>>
'800a0005' 图片上传出现写入文件失败的错误 -- 修改pload_5xsoft.inc
查看>>
[Egret][文档]遮罩
查看>>
sql的split()函数
查看>>
建造者模式
查看>>
hdu 1166 敌兵布阵 (线段树)
查看>>
递归分解因数
查看>>
突然想到了王自如
查看>>
JAVA关键字
查看>>
Adding Flexcan driver support on Kernel
查看>>
ElastciSearch简单总结(笔记)
查看>>
14-angular.isDefined
查看>>
oracle高效分页查询总结
查看>>