设为首页 加入收藏

TOP

SPOJ 694、705 Distinct Substrings 、 New Distinct Substrings (后缀数组)
2015-07-24 05:45:48 来源: 作者: 【 】 浏览:4
Tags:SPOJ 694 705 Distinct Substrings New 后缀

题目大意:

求串中不同的子串的个数。


思路分析:

子串一定是某一个后缀的前缀。

所以我们把每一个后缀拿出来,分析它有多少个前缀,然后除去它与sa数组中前面那个后缀相同的前缀。

最后也就是 ans = segma (n-sa[i] + height[i])....


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #define maxn 1000005 using namespace std; char str[maxn]; int sa[maxn],t1[maxn],t2[maxn],c[maxn],n; void suffix(int m) { int *x=t1,*y=t2; for(int i=0;i
      
       =0;i--)sa[--c[x[i]]]=i; for(int k=1;k<=n;k<<=1) { int p=0; for(int i=n-k;i
       
        =k)y[p++]=sa[i]-k; for(int i=0;i
        
         =0;i--)sa[--c[x[y[i]]]]=y[i]; swap(x,y); p=1;x[sa[0]]=0; for(int i=1;i
         
          =n)break; m=p; } } int rank[maxn],height[maxn]; void getheight() { int k=0; for(int i=0;i
          
           

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇uva 11916 - Emoogle Grid(大步小.. 下一篇uva 1069 - Always an integer(数..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: