首先考虑枚举分割点(整个串为回文可看做在 0 处分割): n−1∑i=0p⌈i2⌉p⌈n−i2⌉ 注意到很像卷积的形式,于是可以使用 NTT 对于所有 n 求出这个式子的值,设其为 fn。
(实际上可以不 NTT 而是考虑增量,我蠢了)
然而显然是会算重的,但注意到会重复算是因为这个串由多个这样的单位串组成,设这样长度为 n 的单位串,即长度为 n 的回文串或只有一种划分方案的两个回文串连接所得的串的个数为 gn。
则取补集得 gn=fn−∑d∣n,d<nndgd
这个可以 O(nlogn) 求得。
答案则为 n∑i=1∑d∣igd=n∑d=1⌊nd⌋gd
代码:
1 |
|