2022 第一轮省队集训 Day2
100+20+10。
T1
考虑一段区间 \([l,r]\) 的答案:把这段数提出来设为 \(a_1,a_2,\dots,a_{r-l+1}\),求出其差分序列 \(b_1,b_2,\dots,b_{r-l+1}\)。那么每次可以在一个地方 \(+1\) 并且在另一个地方 \(-1\)。所以这段的答案就是 \(\max(S,-S')\),其中 \(S\) 为所有正的 \(b_i\) 的和,\(S'\) 为所有负的 \(b_i\) 的和。
先不考虑回退,用平衡树维护差分序列,区间加就是两个单点加,区间翻转就是差分序列上的一段区间翻转和取反,以及两个单点修改。
对于回退,因为不强制在线,离线所有询问并建出操作树即可。操作的撤销是非常好做的。
注意分析是否要开 long long
。
T2
听懂的一小部分可以见“模拟赛 T2 的一部分”。
T3
用生成函数推一下,得到答案是
然后用差分搞。很显然我掉线了。回去看看《具体数学》。
线性递推
其形式是 \(f_n=\sum_{i=1}^m a_if_{n-i}\)。
设其 OGF 是 \(A(x)\),那么存在多项式 \(P(x),Q(x)\) 使得 \(A(x)=\frac{P(x)}{Q(x)}\),且 \(\deg Q(x)=m,\deg P(x)<m\)。
计算
有一个经典算法,用特征多项式。没听懂。
还有一个新算法,直接计算 \([x^n]P(x)/Q(x)\)。上下乘 \(Q(-x)\),可以得到 \(P(x)Q(-x)/Q(x)Q(-x)\)。因为 \(Q(x)Q(-x)\) 中奇次项系数全零,所以分母可以表示成 \(V(x^2)\)。
把分母展开成多项式,那么这里面也只有偶次项。讨论 \(n\) 的奇偶性,分子也可以只保留奇次项或者偶次项。递归下去,每次多项式次数折半,时间复杂度 \(O(m\log m\log n)\),\(m\log m\) 是多项式乘法。
完全背包
求 \([x^N]\prod_{i=1}^n 1/(1-x^{c_i})\)。
\(N\le 10^{100},n\le 50,c_i\le 500\),任意模数。
上下同乘 \(\prod (1+x^{c_i})\),得到:
设 \(Q(x)=\prod (1-x^{c_i}),P(x)=\prod (1+x^{c_i})\),令 \(t=x^2\),那么上式是 \(P(x)/Q(t)\)。仍然讨论 \(N\) 的奇偶性,假如是奇数的话,只需要保留 \(P(x)\) 中的奇次项,写成 \(xP(t)/Q(t)\),此时需要递归计算 \([t^{(N-1)/2}]P(t)/Q(t)\);否则递归计算 \([t^{N/2}]P(t)/Q(t)\)。
每次操作中,\(P\) 的次数都先折半,再乘上 \(n\) 个 \((1+x^{c_i})\),所以它的次数始终是 \(O(nC)\) 级别的。每次乘一个 \((1+x^{c_i})\) 都需要 \(O(nC)\) 时间,总时间复杂度是 \(O(n^2C\log N)\)。
模拟赛 T2 的一部分
求 \(N\) 拆成 \(b\) 的非负整数次方的方案数。
\(2\le N,b\le 10^{18}\)。
答案就是
把 \(1/(1-x)\) 干掉:上下同乘 \(P(x)=(1-x^b)/(1-x)=1+x+x^2+\dots+x^{b-1}\),得到
令 \(t=x^b\),分母就是 \(Q(t)\),其中 \(Q\) 是一个多项式。
因为最终提取的是 \(x^N\) 项系数,所以分子只需要保留所有 \(i\equiv N\pmod b\) 的 \(x^{i}\) 项。那么分子可以写成 \(x^{N\bmod b}P'(t)\) 的形式。所以此时要求的就是:
与上面的式子有相同的形式,递归下去即可。
每递归一次,\(\deg P'\) 都会先加 \(b\) 再除以 \(b\),所以 \(\deg P'\) 是 \(O(\log N)\) 级别的。用 Day3 杜爷讲的技巧就可以单次 \(O(\log N)\) 乘上一个 \(P(x)=(1-x^b)/(1-x)\)。
时间复杂度 \(O(\log^3 N)\)。找时间看看这题代码。
分式分解
ODE
常微分方程,指的是 \(F(x,y,y',y'',\dots,y^{(m)})=0\)。
微分有限指的是一个函数 \(y\) 有这样的 ODE:
其中 \(f_i\) 是常数次数的有理分式。
对于一个微分有限的 \(y\),可以把所有 \(f_i\) 通分,然后两边提取 \([x^n]\) 次项系数。对于一个 \(y^{(i)}(x)\):
那么可以得到关于 \(y(x)\) 的系数的线性递推。