題意:求串s的不同子串的個數
解題思路:任何子串都是某個字尾的字首,對n個字尾排序,求某個字尾的字首的個數,減去height[i](第i個字尾與第i-1 個字尾有相同的height[i]個字首)。
**如下:
#include#include#include#include#include#include#include#define n 50005
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
#define eps 10e-6
using namespace std;
char s[n];
int r[n],wa[n],wb[n],wv[n],ws[n],sa[n];
bool cmp(int *r,int a,int b,int l)
void da(int n,int m)
}int rank[n],height[n];
void calheight(int n)
void solve(int n)
{ int ans = 0;
int i;
// for(i = 1; i <= n; i++) cout<
SPOJ705 不同的子串
我是萌萌的傳送門 看來我的做法也沒錯嘛.看別人的 寫字尾陣列的好像是利用sa和height什麼的搞一搞,看了看表示沒看懂 看了看字尾自動機眾的 好像是用什麼np len np par len更新答案,看了看表示理解不了 於是根據我對字尾自動機的理解強行yy了一發字尾自動機 dp的做法 我的想法是這樣...
SPOJ705 不同的子串
給定乙個字串,計算其不同的子串個數。一行乙個僅包含大寫字母的字串,長度 50000 一行乙個正整數,即不同的子串個數。ababa 題解 顯然字尾可以是乙個子串,然後字尾中可能包含多個子串。我們考慮不重複統計,容易發現 乙個字尾的貢獻為l high i 1 因為high i 之前的顯然可以在後面的串中...
spoj 705 求不同子串的個數(字尾陣列)
題意 給定乙個字串,求不相同的子串的個數。解題思路 對於乙個字尾sa k 它產生了n sa k 個字首,減去height k 個相同的字首 與前乙個比較 則產生了n sa k height k 個子串。累加後即結果。view code 1 2 author zhaofa fang 3 created...