POJ 3729 Facer’s string (后缀数组)

2015-07-24 05:45:13 · 作者: · 浏览: 6

题目大意:

串1中有多少个后缀和 串2中的某个后缀 的lcp 为 k


思路分析:

先找出 长度至少为k的对数有多少。

再找出 至少为k+1的有多少

然后相减。


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
       #include 
       
         #define maxn 110005 using namespace std; int 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