后缀数组(不可重叠重复子串)poj1743

思路:二分答案,然后遍历height数组,看能不能找到符合条件的

我写的一直wa,求大神指导

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn=20010;
const int INF=10000000;
int n,x[maxn];
int sa[maxn],Rank[maxn],height[maxn],t[maxn],t2[maxn],c[300];
int a[maxn];
void build_sa(int m)
{
    int *x=t,*y=t2;
    for(int i=0;i=0;i--)sa[--c[x[i]]]=i;
    for(int k=1;k<=m;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;
    }
}
void getheight()
{
    int k=0;
    for(int i=0;i=mid)return true;
            maxs=mins=sa[i];
        }
        else
        {
            maxs=max(maxs,sa[i]);
            mins=min(mins,sa[i]);
        }
    }
    if(maxs-mins>=mid)return true;
    return false;
}
void solve()
{
    for(int i=0;i


你可能感兴趣的:(后缀数组,字符串)