写总结的地方
- 将式子转化为卷积形式: $\displaystyle{\sum_{i=1}^n A_i B_{n-i}}$
P3338 [ZJOI2014]力
题意:
求 $E_j=\displaystyle{\sum_{i=1}^{j-1}\frac{q_j}{\left(i-j\right)^2} - \sum_{i=j+1}^n \frac{q_j}{\left(i-j\right)^2}}$$q_i被消掉了qwq$
解:
先简化数据范围
化成能算的样子
设 $f[i]=q_j \ , f’[i]=f[n-i] \ , \ g[i]=\frac{1}{i^2}$
$\bf{Trick:}$ 翻转数列
&& 把函数设成数组以看起来更好算
P3723 [AH2017/HNOI2017]礼物
题意:
给定两个序列 $a,b$ ,顺序可以移动,求 $\displaystyle{\sum_{i=1}^n \left(a_i-b_i+c \right)^2}$ 最小值
解:
由题:要取 $\displaystyle{\sum_{i=1}^n a_ib_i}$ 的最大值
考虑移动 $k$ 位时:
先把环 $b$ 变为链 $\Rightarrow$ $b[i+n]=b[i]$
转化为考虑 $\displaystyle{\sum_{i=1}^n a_ib_{i+k} }$
翻转 $a$ 得 $\displaystyle{\sum_{i=1}^n b_{i+k} \cdot a_{n-i+1}}$ , 符合卷积形式
$\therefore \tt{FFT}\left(a_{reserved}\right),\tt{FFT}(b)$
$\bf{Trick:}$ 由于 $c$ 是整数,用二次函数对称轴来算 [式三],比枚举 $-100\leq c \geq 100$ 更好
算出$\left\lfloor -\frac{a}{b} \right\rfloor$ 和 $\left\lceil -\frac{a}{b} \right\rceil$ , 取 $\min$
P5488 差分与前缀和
题意:
求数列 $a$ 的 $k$ 维前缀和或差分
解:
设 $\displaystyle{F(x)=\sum_{i=0}^\infty a_ix^i }$
前缀和
比较前缀和与卷积
$\displaystyle{a_i=\sum_{j=1}^i a_j \qquad \And\And \qquad S_i=\sum_{j=1}^i A_j B_{i-j}}$
发现需要卷一个系数都为 $1$ 的多项式 $G(x)$
以样例为例:
发现 $F(x)\cdot G(x)$ 所得多项式就是 $F$ 的一阶前缀和
$\displaystyle{\therefore 显然有 G(x)=\frac{1}{1-x}}$
$\displaystyle{\therefore k阶前缀和 \Rightarrow
F(x) \cdot \frac{1}{\left(1-x \right)^k}}$
$\displaystyle{\frac{1}{\left(1-x \right)^k} 的第 n 项系数就是 \dbinom{n+k-1}{k-1} }$
$\displaystyle{\therefore a_i=\sum_{j=1}^{i-1}\dbinom{j+k-1}{k-1} \cdot a_{i-j} }$
设组合数递推式 $g_i=\dbinom{i+k-1}{k-1}$
$$\begin{aligned}
\therefore
g_i
&=\frac{g_{i-1}\times (k+i-1)}{i}\%p &\text{只会在计算中用到这个}\\
&=\left(\frac{g_{i-1} }{i}\%p \right)\times ((k+i-1)\%p) \\
&=\left(\frac{g_{i-1} }{i}\%p \right)\times ((k\%p+i-1)\%p) \\ &\text{只是为了推 $k$ 可以取模} \\
\end{aligned}$$
$\therefore$ 可以对 $k$ 取模
差分
易得 $F(x) \times (1-x)$ 所得的多项式就是差分后
同理得 $\left(1-x\right)^k$
看组合数递推式: $\dbinom{k}{i}$