題目大意:
求在m個串中同時出現兩次以上且不覆蓋的子串的長度。
思路分析:
二分答案,然後check是否滿足,判斷不覆蓋的方法就是用up down 來處理邊界。
#include #include #include #include #include #include #define maxn 110005 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>1; if(check(mid,m)) ans=mid,l=mid+1; else r=mid-1; } printf("%d\n",ans); } return 0; }
題目 Given n non-negative i
一. 舉例說明 以前做了一個程序,程序的功能是評
在C++中,指針用得比較多,對於裡面眾多的指針用法,不免弄
BOOST.Asio——Tutorial,boost.asi
make_server_socket( port);