ACdream 1430 字尾陣列 分組

2021-06-26 04:10:41 字數 844 閱讀 9827

題意:給定乙個字串,求出不重複且出現過至少兩次的子串個數;

思路: 典型的字尾陣列題,只是比賽中沒考慮到時間,以為o(n^2)覺得爆,沒看到時間是10s,唉。。

就是字尾後,列舉子串可能的長度,對 height 分組,維護長度一定時改子串的起點的最大,最小值;

如果 (max-min>= k) ,就是ans++;  總是以後做題必定考慮下時間效率;

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int maxn=10010;

char s[maxn];

int sa[maxn],t[maxn],t2[maxn],c[maxn],n;

void build_sa(int n,int m) }

//lcp

int ra[maxn],height[maxn];

void getheight(int n)

else //更新max,min

} }}

int main()

{ while(~scanf("%s",s))

{int n=strlen(s);

build_sa(n+1,200);

getheight(n);

sum=0;

calc(n);

cout<

ACdream原創群賽 13 I 字尾陣列

對於i,a i 即為i之後的所有a i 的和加字尾s 0 與s i 的最長公用字首。求fbi時可以先打表打出前100000個,小的直接查表,大的用矩陣快速冪求。this code is made by 2bpencil problem 1116 verdict accepted submission...

字尾樹 字尾陣列

在字串處理當中,字尾樹和字尾陣列都是非常有力的工具,其中字尾樹大家了解得比較多,關於字尾陣列則很少見於國內的資料。其實字尾陣列是字尾樹的乙個非 常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽 中字尾...

字尾樹 字尾陣列

我們考慮將乙個串的所有字尾插入乙個trie中,得到的trie就是字尾trie。我們可以發現,樹上有分叉或者是字尾節點的點的個數是o l en o len o len 個,這個後面解釋,於是把沒有分支並且不是字尾節點的點壓縮到一起,就變成了字尾樹。不難發現,字尾樹可以表示該字串的所有子串。下面分析一下...