【jzoj5315】【NOIP2017提高A组模拟8.19】【小串串】【sam 】
2017-08-19 17:24
633 查看
description
solution
构出sam,求出fail树子树大小,贡献为size[x]^2*(mx[fa[x]]-mx[x])。
code
#include<set> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define LL long long #define ULL unsigned long long #define fo(i,j,k) for(int i=j;i<=k;i++) #define fd(i,j,k) for(int i=j;i>=k;i--) #define fr(i,j) for(int i=begin[j];i;i=next[i]) using namespace std; int const mn=1e5+9,mp=2*1e5+9,mo=1e9+7; int t,n,f[mp],mx[mp],fa[mp],son[mp][26],a[mp]; char s[mn]; bool cmp(int x,int y){ return mx[x]<mx[y]; } int main(){ freopen("d.in","r",stdin); freopen("d.out","w",stdout); scanf("%d",&t); fo(cas,1,t){ scanf("%s",s+1); n=strlen(s+1); fo(i,1,n)s[i]-='a'; int pon=1,last=1; fo(ii,1,n){ int p=last,np=last=++pon,ch=s[ii]; mx[np]=mx[p]+1;f[np]=1; for(;p&&(!son[p][ch]);p=fa[p])son[p][ch]=np; if(!p){fa[np]=1;continue;} int q=son[p][ch]; if(mx[p]+1==mx[q])fa[np]=q; else{ int nq=++pon; mx[nq]=mx[p]+1; fa[nq]=fa[q]; fa[q]=fa[np]=nq; fo(i,0,25)son[nq][i]=son[q][i]; for(;p&&(son[p][ch]==q);p=fa[p])son[p][ch]=nq; } } fo(i,1,pon)a[i]=i; sort(a+1,a+pon+1,cmp); LL ans=0; fd(i,pon,2){ int p=a[i]; f[fa[p]]+=f[p]; ans+=1ll*(mx[p]-mx[fa[p]])*f[p]*f[p]; } printf("%lld\n",ans); fo(i,1,pon){ mx[i]=fa[i]=f[i]=0; fo(j,0,25)son[i][j]=0; } } return 0; }
相关文章推荐
- JZOJ 5347. 【NOIP2017提高A组模拟9.5】遥远的金字塔
- JZOJ5354. 【NOIP2017提高A组模拟9.9】导弹拦截
- [JZOJ5358]【NOIP2017提高A组模拟9.12】BBQ
- JZOJ 5177. 【NOIP2017提高组模拟6.28】TRAVEL
- [JZOJ5187]【NOIP2017提高组模拟6.30】tty's maze
- 【jzoj5368】【NOIP2017提高A组模拟9.16】【为逝去的公主献上的七重樱】【单调队列】
- JZOJ5381. 【NOIP2017提高A组模拟9.21】传送蛋糕
- JZOJ 100035. 【NOIP2017提高A组模拟7.10】区间
- JZOJ 5384. 【NOIP2017提高A组模拟9.23】四维世界
- 【JZOJ5249】【NOIP2017提高A组模拟8.10】文本编辑器
- 【jzoj5333】【NOIP2017提高A组模拟8.23】【大新闻】【可持久化线段树】
- 【jzoj5335】【NOIP2017提高A组模拟8.24】【早苗】【矩阵乘法快速幂】
- JZOJ5399. 【NOIP2017提高A组模拟10.7】Confess bitset
- 【JZOJ 4932】【NOIP2017提高组模拟12.24】B
- JZOJ5379. 【NOIP2017提高A组模拟9.21】Victor爱数字
- JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林
- 【jzoj5289】【NOIP2017提高组A组模拟8.17】【偷笑】【数据结构】
- JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)
- JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器
- 【JZOJ5287】【NOIP2017提高组模拟】最短路