2018CCPC桂林


泪目了,学多项式以来,第一次在赛中做出多项式题,乌乌。

A. Array Merge

贪心。听说是原题,现场的THU13min就过了,待补。

B. Array Modify

NTT,生成函数。

【前置芝士:生成函数,多项式乘法\&求逆\&求ln\&求exp】

观察or打表可以发现从某个位置开始,所有后继的贡献的生成函数为$(1+x+x^2+x^3+…+x^{L-1})^m$,

因此考虑求前$L$项为$1$的多项式$G(x)$的$m$次方,显然有$G(x)^m=e^{m\ln G(x)}$,套板子的事,复杂度$O(n\log n)$(如果用快速幂的方法求$G(x)^m$,复杂度是$O(n\log^2n)$,因为每次多项式乘法是$O(n\log n)$的),

设$F(x)=a_0+a_1x+a_2x^2+…+a_{n-1}x^{n-1}$,求出$H(x)=G(x)^m=b_0+b_1x+b_2x^2+…+b_{n-1}x^{n-1}$之后,最后输出的第$p$位即为$\sum_{i=0}^{n-p-1}a_{p+i}b_i$,

考虑将$H(x)$的前$L$项取反,变为$H’(x)=b_{n-1}+b_{n-2}x+…+b_0x^{n-1}$,

此时第$p$位的值就是一个卷积:$\sum_{i=0}^{n-p-1}a_{p+i}b_{n-1-i}$(此时$p+i+n-1-i=p+n-i$),

因此再对$F(x)$和$H’(x)$做一次多项式乘法,依次输出$n$到$2n-1$项就是答案辣。

【多项式题都是老套路了,建议是去学学,真没那么难,只要会推式子当成黑盒就行。】

【类比一下:多项式$::$网络流,推柿子$::$建图,一般来说不需要明白黑盒里面的原理(当然最好是能搞明白原理)】

G. Greatest Common Divisor

数论。首先根据欧几里得定理,我们有:

$\gcd(a_1,a_2,…a_n)=\gcd(a_1,a_2-a_1,…,a_n-a_1)$,

对于本题来说$a_i-a_1$是不变的,所以可以枚举所有$t|\gcd(a_2-a_1,a_3-a_1,…,a_n-a_1)$,求出满足$t|a_1+k$的最小的$k$即可。

H. Hamming Distance

贪心。题解可能相对长,明天写。

J. Stone Game

博弈。这题其实不算啥博弈,实际上最终状态一定是由所有数的相对大小关系确定的,所以答案之和最终状态总数和初始总数之差的奇偶性有关。

从前到后扫一遍$f_i=max(a_i>a_{i-1}?f_{i-1}+1:0,f_i)$

从后到前扫一遍$f_i=max(a_i>a_{i+1}?f_{i+1}+1:0,f_i)$

即可求出最终状态。

L. Two Ants

计算几何。听队友说就是抄一堆板子+分类讨论,待补。