【HDU5730】Shell Necklace(多项式运算,分治FFT)
题面
翻译:
有一个长度为
\(n\)的序列
已知给连续的长度为
\(i\)的序列装饰的方案数为
\(a[i]\) 求将
\(n\)个位置全部装饰的总方案数。
答案
\(mod\ 313\) 题解
很明显,是要求:
\(f[n]=\sum_{i=0}^na[i]\times f[n-i],f[0]=0\) 卷积的形式啊。。
然后就可以开始搞了
忍不住的方法一
好明显啊,把生成函数\(F,A\)给搞出来
然后就有
\(F*A+1=F\) 然后
\((1-A)F=1\) 然后
\(F=\frac{1}{1-A}\) 多项式求逆,没了。。。
但是这个
\(mod\ 313\)很蛋疼啊。。
直接蒯模板了 #include #include #include #include #include #include #include #include
很生疏的方法二
这种东西显然也可以\(CDQ\)分治+\(FFT\)来做
简称分治
\(FFT\) 怎么考虑?
式子长成这样:
\(f[n]=\sum_{i=0}^na[i]\times f[n-i],f[0]=0\) 一定要求出前面的才能计算后面的。
每次考虑左半段对于右半段的贡献
直接拿左半段和右半段,(要求的东西)做卷积
这样,对于每一项的系数,都是右半段每个点的一部分贡献。累加即可。
复杂度
\(O(nlog^2n)\) 模数
\(313\)依旧蛋疼。
#include #include #include #include #include #include #include #include