#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
const int mod=1e9+7;
#define pb push_back
#define all(x) (x).begin(),(x).end()
typedef long long ll;
typedef vector<int> vi;
ll qpow(ll a,ll b){ll ans=1;a%=mod;assert(b>=0);for(;b;b>>=1){if(b&1)ans=ans*a%mod;a=a*a%mod;}return ans;}
ll gcd(ll a,ll b){return b>0?gcd(b,a%b):a;}
int vis[maxn];
struct SAM{
int nxt[maxn<<1][15];
int link[maxn<<1];
int step[maxn<<1];
int sum[maxn<<1];
int last,sz,rt;
void init(){
rt=sz=last=1;
}
void add(int c){
int p=last,np=++sz;
last=np;
step[np]=step[p]+1;
while(!nxt[p][c]&&p){
nxt[p][c]=np;
p=link[p];
}
if(p==0){
link[np]=rt;
}else{
int q=nxt[p][c];
if(step[p]+1==step[q]){
link[np]=q;
}else{
int nq=++sz;
memcpy(nxt[nq],nxt[q],sizeof nxt[q]);
link[nq]=link[q];
link[np]=link[q]=nq;
step[nq]=step[p]+1;
while(nxt[p][c]==q&&p){
nxt[p][c]=nq;
p=link[p];
}
}
}
}
}sam;
int main(){
int n,m,T;
cin>>n;
string s;
sam.init();
return 0;
}
SAM模板
最新推荐文章于 2024-06-12 10:02:04 发布
本文深入探讨了使用 C++ 实现的特殊字典树(Suffix Array Machine, SAM)结构,这是一种高效处理字符串问题的数据结构。文章详细介绍了 SAM 的初始化、节点链接、步数计算及添加字符的方法,并提供了完整的代码实现,适用于处理字符串匹配和模式识别等任务。
890

被折叠的 条评论
为什么被折叠?



