为什么纯 SAM 做法在状态上打标记是对的

P3649 [APIO2014] 回文串

完整一点的代码: ```cpp int u=0,len=0; long long ans=0; for(int i=n;i>=1;i--) { while(u!=-1&&sam.to[u][a[i]-'a']==0) { u=sam.link[u]; if(u!=-1) len=sam.len[u]; } if(u==-1) u=0,len=0; else u=sam.to[u][a[i]-'a'],len++; int r=i+len-1,v=u; if(sam.mx[u]>=i&&sam.mx[u]<=r) ans=max(ans,1ll*(sam.mx[u]-i+1)*sam.siz[u]); while(v!=-1&&!vis[v]&&sam.mx[v]<=r&&sam.len[v]>=sam.mx[v]-i+1) { vis[v]=true; if(sam.mx[v]>=i) ans=max(ans,1ll*(sam.mx[v]-i+1)*sam.siz[v]); v=sam.link[v]; } } ```
by lovely_ckj @ 2023-02-08 15:54:20


感觉正确的做法应该是倍增跳到第一个 mx 不同的状态
by lovely_ckj @ 2023-02-08 16:23:18


|