1166不相同的子串的個數 字尾陣列

2021-08-25 02:36:48 字數 763 閱讀 1807

題目描述

給定乙個字串,求不相同的子串的個數。

輸入 輸入資料第一行為乙個數字 t,表示資料組數。(t<=10)

接下來的 t 行,每行乙個由小寫或大寫字母構成的字串,字串長度不超過 50000。

輸出 對於每組資料,輸出一行乙個數字,表示答案。

樣例輸入

4 abbabba

dabddkababa

bacaba

baba

樣例輸出

17 55

17 7

題解

對於每乙個字尾 sa[i],他都可以產生 n-sa[i] 個字首, 然後刪去 h[i] 和之前重複的即為答案

字尾陣列部分詳見

**

#include

#define ll int

#define maxn 50010

using

namespace

std;

char s[maxn];

ll sa[maxn],tp[maxn],rk[maxn],tax[maxn],n,m=127,hei[maxn],ans,t;

void qsort()

void suffix()

}void height()

}void work()

int main()

return

0;}

DTOJ 1166 不相同的子串的個數

給定乙個字串,求不相同的子串的個數。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 he...

字尾陣列 不相同的字串個數

spoj改版後好囧 不相同的子串的個數 spoj694,spoj705 給定乙個字串,求不相同的子串的個數。演算法分析 每個子串一定是某個字尾的字首,那麼原問題等價於求所有字尾之間的不相 同的字首的個數。如果所有的字尾按照 suffix sa 1 suffix sa 2 suffix sa 3 su...

spoj 694 不相同的子串的個數

字尾陣列 處理字串的有力工具 題目大意 要求求乙個字串中不同子串的個數 解題思路 利用字尾陣列,每個子串一定是某個字尾子串的字首,求多少個不同的子串等價於求出所有字尾之間的不相同的字首的個數。設字串為str,sa i 表示排名第i的字尾從str的第sa i 個位置開始,rank i 表示str i ...