給定乙個字串,求不相同的子串的個數。
1 ≤t
≤10
1 \leq t \leq 10
1≤t≤10
,字串長度≤5×
10
5\leq 5 \times 10^5
≤5×105
。考慮到字串所有字尾的字首,所以我們只要把新增的n+1
−sa[
i]
n+1-sa[i]
n+1−sa
[i]個字首,減去hei
ght[
i]
height[i]
height
[i]個相同的字首即可。
#includeusing namespace std;
const int n=5e5+10;
int n,m,ht[n],sa[n],r[n],fir[n],sec[n],sum[n];
char c[n];
long long ans;
void get_sa()
for(int i=1;i<=n;++i)r[sa[i]]=i;
}void get_h()
}int main()
return 0;
}
1166不相同的子串的個數 字尾陣列
題目描述 給定乙個字串,求不相同的子串的個數。輸入 輸入資料第一行為乙個數字 t,表示資料組數。t 10 接下來的 t 行,每行乙個由小寫或大寫字母構成的字串,字串長度不超過 50000。輸出 對於每組資料,輸出一行乙個數字,表示答案。樣例輸入 4 abbabba dabddkababa bacab...
spoj 694 不相同的子串的個數
字尾陣列 處理字串的有力工具 題目大意 要求求乙個字串中不同子串的個數 解題思路 利用字尾陣列,每個子串一定是某個字尾子串的字首,求多少個不同的子串等價於求出所有字尾之間的不相同的字首的個數。設字串為str,sa i 表示排名第i的字尾從str的第sa i 個位置開始,rank i 表示str i ...
spoj705 求不相同的子串個數
題意 求串s的不同子串的個數 解題思路 任何子串都是某個字尾的字首,對n個字尾排序,求某個字尾的字首的個數,減去height i 第i個字尾與第i 1 個字尾有相同的height i 個字首 如下 include include include include include include inc...