【hihocoder】sam1-基本概念
2024-10-21 09:28:55
这题有毒……
原本只是想复习下sam,于是写……
后来发现自己傻了不知道怎么维护endpos……
一气之下直接kmp拉倒,mdzz
UPD:现在我好像会维护endpos了……
#include<bits/stdc++.h>
#define N 100010
using namespace std;
int a[N],l,n,b[N],t,nxt[N];
struct Suffix_AutoMaton{
int cnt,last,ch[N][],l[N],r[N],fa[N];
void ins(int c,int pos){
int p=last,np=++cnt;last=np;l[np]=pos;r[np]=pos;
for(;p&&!ch[p][c];p=fa[p])ch[p][c]=np;
if(!p)fa[np]=;
else{
int q=ch[p][c];
if(l[p]+==l[q])fa[np]=q,r[q]=pos;
else{
int nq=++cnt;l[nq]=l[p]+;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
fa[nq]=fa[q];fa[q]=fa[np]=nq;r[nq]=pos;
for(;p&&ch[p][c]==q;p=fa[p])ch[p][c]=nq;
}
}
}
Suffix_AutoMaton(){last=cnt=;}
void build(int *a,int n){for(int i=;i<=n;i++)ins(a[i],i);}
inline int get(int *a,int n){
int k=;for(int i=;i<=n;i++)k=ch[k][a[i]];
return k;
}
}sam;
inline char read(){
char c=getchar();
while(c<'a'||c>'z')c=getchar();
return c;
}
int main(){
char c=read();
while(c>='a'&&c<='z')a[++l]=c-'a',c=getchar();
sam.build(a,l);scanf("%d",&n);
while(n--){
t=;char c=read();
while(c>='a'&&c<='z')b[++t]=c-'a',c=getchar();
int s=sam.get(b,t);
for(int j=sam.r[s]-sam.l[sam.fa[s]];j<=sam.r[s];j++)printf("%c",a[j]+'a');putchar(' ');
for(int j=sam.r[s]-sam.l[s]+;j<=sam.r[s];j++)printf("%c",a[j]+'a');
nxt[]=;
for(int i=,j=;i<=t;i++){
while(j&&b[i]!=b[j+])j=nxt[j];
j+=b[i]==b[j+];
nxt[i]=j;
}
for(int i=,j=;i<=l;++i){
while(j&&a[i]!=b[j+])j=nxt[j];
if(a[i]==b[j+])++j;
if(j==t)printf(" %d",i),j=nxt[j];
}
puts("");
}
}
最新文章
- POJ Challenge消失之物
- 抽象类&;接口
- SQL*Loader之CASE6
- Window7 驱动编程环境配置
- MSP430设置串口波特率的方法
- [改善Java代码]易变业务使用脚本语言编写
- 【HDOJ】1175 连连看
- Object-C知识点 (三) 单例 蒙版 刷新 KVO底层
- YYHS-挑战nbc
- 【BZOJ1483】【HNOI2009】梦幻布丁
- C语言设计第一次作业
- 微信小程序之弹出操作菜单
- 利用Python+163邮箱授权码发送邮件
- 简单Nginx下防跨站、跨目录安全设置,支持PHP 5.3.3以上版本
- Qt+QGis二次开发:矢量图层的显示样式
- nginx负载均衡fair方式分发
- 【Jenkins】Jenkins安装修改默认路径和端口的方法
- Java变量的初始值
- Python图片识别找坐标(appium通过识别图片点击坐标)
- 转:【衬线字体与无衬线字体】font-family之Serif和Sans-Serif
热门文章
- BZOJ 2460 元素(贪心+线性基)
- 【刷题】BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式
- [NOIP2012]疫情控制 贪心 二分
- BZOJ1801:[AHOI2009]中国象棋——题解
- bzoj4773: 负环(倍增floyd)
- 51nod 1215 数组的宽度&;poj 2796 Feel Good(单调栈)
- BAT-Python面试题
- 用CSS3实现的addidas阿迪达斯标志LOGO
- bzoj 1135 [POI2009]Lyz 线段树+hall定理
- HDU1078记忆化搜索