POJ 3261 Milk Patterns(后缀数组)

2015-11-21 01:59:34 · 作者: · 浏览: 11

题目大意:

求可覆盖的出现k次的子串的最大长度。


思路分析:

同样是二分答案的长度,然后扫描height判断是否成立。


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #define maxn 1000005 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
          
           =k)return true; } } return false; } int bin(int k) { int l=1,r=n,ans=0; while(l<=r) { int mid=(l+r)>>1; if(ok(mid,k)) { ans=mid,l=mid+1; } else r=mid-1; } return ans; } int main() { int k; while(scanf("%d%d",&n,&k)!=EOF) { for(int i=0;i