題意
已知字符集大小 ∣∑∣=A,計算字符串對 (S,T) 的數目,滿足:
- ∣S∣=N,∣T∣=M
- T 是 S 的一個子串.
答案對 109+7 取模.
對於所有數據,滿足 1≤N≤200,1≤M≤50,M≤N,1≤A≤1000.
每個測試點具體限制見下表。
測試點編號 |
N |
M |
A |
分值 |
1 |
≤10 |
≤10 |
=2 |
5 |
2 |
≤50 |
=N−1 |
≤1000 |
10 |
3 |
≤50 |
=N−2 |
≤1000 |
20 |
4 |
≤200 |
≤5 |
≤1000 |
15 |
5 |
≤200 |
≤50 |
≤1000 |
50 |
題解
考慮枚舉T在那個位置第一次成爲S的子串,這要求S在前面的位置都不出現T,即減去前面出現T的方案,如果前面出現的位置和該位置沒有交集是好算的,但如果有交集就比較麻煩,且與T本身的形態有關。考慮如果前面也出現了T且與該位置有交集的時候,T必須是交集的前面一段一直循環的結果,形式化地可以表示成一段前綴和一段後綴相等(這比循環要方便得多)。於是我們只需要知道T的哪些長度的前綴會與後綴相等,感覺上這樣的情況種類不會很多,於是我們直接暴搜出每個長度是否合法的所有情況,事實證明這隻有2249個,然後對每種情況直接DP容斥即可。