SP694 字尾陣列

2021-10-08 12:43:31 字數 890 閱讀 5860

求乙個字串本質不同的子串

考慮容斥

因為每乙個子串應該都是原串的乙個字尾的字首。因此重複的子串的總數應該就是所有字尾的hei

gh

theight

height

陣列的和。

a ns

=n∗(

n+1)

/2−∑

i=1n

heig

ht[i

]ans=n*(n+1)/2-\sum_^height[i]

ans=n∗

(n+1

)/2−

∑i=1

n​he

ight

[i]

#include

#define m 1000009

#define int long long

using

namespace std;

int n,tax[m]

,height[m]

,rk[m]

,sa[m]

,tp[m]

,m;char s[m]

;void

qsort()

void

getheight()

}void

suffix()

getheight()

;int res=n*

(n+1)/

2;;for

(int i=

1;i<=n;i++

) res-

=height[i]

;printf

("%lld\n"

,res);}

signed

main()

return0;

}

字尾陣列入門 SPOJ694

求單個子串的不重複字串的個數 t 20,len 1000 這是一道經典的字尾陣列入門題。由於剛開始學,對字尾陣列的理解還很抽象,於是拿這道題先找找感覺。首先,每個子串都可以理解成是某個字尾的字首,這是聯想到字尾陣列演算法的重要一步。接著,對於每乙個sa i 字尾陣列,含義為第i小的字尾的起始位置是s...

洛谷 SP705 字尾陣列

傳送門 回來複習一下字尾陣列,感覺之前不理解的地方突然都能理解了 w 說實話字尾陣列比字尾自動機簡單。這道題要求本質不同的子串數量,可以模擬字尾自動機的方法,字尾i貢獻的數量就是i的長度 height rank i 因為之前那幾個字首和某乙個字尾的字首重複了。include using namesp...

字尾樹 字尾陣列

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