struct state {
int len,link;
int nxt[31];
};
char s[N];
int n,ans,t[N],a[N],b[N],O;
struct SAM {
state st[N*2];
int siz,last;
void init() {
for(int i=0; i<=O; i++) {
st[i].len=0;
st[i].link=0;
for(int j=0; j<31; j++) {
st[i].nxt[j]=-1;
}
}
siz=1;
last=1;
}
void extend(int c) {
int cur=++siz,p=last;
st[cur].len=st[last].len+1;
b[cur]=1;
while(p!=0&&st[p].nxt[c]<0) {
st[p].nxt[c]=cur;
p=st[p].link;
}
if(p==0) st[cur].link=1;
else {
int q=st[p].nxt[c];
if(st[p].len+1==st[q].len) {
st[cur].link=q;
} else {
int k=++siz;
st[k].len=st[p].len+1;
memcpy(st[k].nxt,st[q].nxt,sizeof st[k].nxt);
st[k].link=st[q].link;
while(p!=0&&st[p].nxt[c]==q) {
st[p].nxt[c]=k;
p=st[p].link;
}
st[q].link=st[cur].link=k;
}
}
last=cur;
}
} Sam;
int sum[N],k,T;
void solve() {
ans=n+1;
for(int i=1; i<=Sam.siz; i++) t[Sam.st[i].len]++;
for(int i=1; i<=Sam.siz; i++) t[i]+=t[i-1];
for(int i=1; i<=Sam.siz; i++) a[t[Sam.st[i].len]--]=i;
for(int i=Sam.siz; i; i--) {
int x=a[i];
b[Sam.st[x].link]+=b[x];
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?