Loading

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

用生成函数推一下,得到答案是

\[\sum_{i\ge 0} (-1)^i \binom{n}{i}\binom{S-it}{m}. \]

然后用差分搞。很显然我掉线了。回去看看《具体数学》。

线性递推

其形式是 \(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})\),得到:

\[\prod_{i=1}^n \frac{1+x^{c_i}}{1-(x^2)^{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}\)

答案就是

\[[x^N]\frac{1}{(1-x)(1-x^b)(1-x^{b^2})(1-x^{b^3})\cdots}. \]

\(1/(1-x)\) 干掉:上下同乘 \(P(x)=(1-x^b)/(1-x)=1+x+x^2+\dots+x^{b-1}\),得到

\[[x^N]\frac{P(x)}{(1-x^b)^2(1-x^{b^2})(1-x^{b^3})\cdots}. \]

\(t=x^b\),分母就是 \(Q(t)\),其中 \(Q\) 是一个多项式。

因为最终提取的是 \(x^N\) 项系数,所以分子只需要保留所有 \(i\equiv N\pmod b\)\(x^{i}\) 项。那么分子可以写成 \(x^{N\bmod b}P'(t)\) 的形式。所以此时要求的就是:

\[[t^{(N-N\bmod b)/b}]\frac{P'(t)}{Q(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:

\[\sum_{i=0}^{m} f_i(x)y^{(i)}(x)=0. \]

其中 \(f_i\) 是常数次数的有理分式。

对于一个微分有限的 \(y\),可以把所有 \(f_i\) 通分,然后两边提取 \([x^n]\) 次项系数。对于一个 \(y^{(i)}(x)\)

\[[x^n]y^{(i)}(x)=[x^{n+i}]y(x)\cdot (n+i)^{\underline{i}}. \]

那么可以得到关于 \(y(x)\) 的系数的线性递推。

posted @ 2022-06-20 14:55  Alan_Zhao_2007  阅读(87)  评论(0编辑  收藏  举报