求乙個字串本質不同的子串
考慮容斥
因為每乙個子串應該都是原串的乙個字尾的字首。因此重複的子串的總數應該就是所有字尾的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
nhe
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...
字尾樹 字尾陣列
在字串處理當中,字尾樹和字尾陣列都是非常有力的工具,其中字尾樹大家了解得比較多,關於字尾陣列則很少見於國內的資料。其實字尾陣列是字尾樹的乙個非 常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽 中字尾...