醉里挑灯看太阳神

《NOI Online 2021 提高组 愤怒的小 N》

虽然可以看出 b 就是 \(\rm bitcount\) 为奇数的数,但我们不用想这么多。

一个集合 \(S\)\(\rm EGF\)\(F_S(x)=\sum_{j\in S}\exp(jx)\),因为此时 \([\frac{x^k}{k!}]F_S(x)=\sum_{j\in S}j^k\) 。包括我们所熟悉的,求 \(\sum_{j\in S}(j{+}\delta)^k\),维护 \(\sum_{j\in S}j^t\;(0\leqslant t\leqslant k)\) 可求,本质上就是 \(\exp(\delta x)F_S(x)\) 罢了。

闲话多说了些。接下来直接开搞。记 \(A_n(x)\)\([0,n)\)\(2\mid\rm bitcount\) 的数的集合的 \(\rm EGF\),也就是 a 的那些关卡;同理可记 \(B_n(x)\) 。根据题目直接有

\[\begin{cases} A_{2^{n+1}}(x)=A_{2^n}(x)+\exp(2^nx)B_{2^n}(x)\\ B_{2^{n+1}}(x)=B_{2^n}(x)+\exp(2^{n}x)A_{2^n}(x) \end{cases} \]

我们讨厌 “换手搓背”,我们希望独立递推,也许进而可知通解——矩阵对角化。

\[\begin{pmatrix} 1 & {\rm e}^{2^nx}\\ {\rm e}^{2^nx} & 1 \end{pmatrix} = \begin{pmatrix} 1 & 1\\ 1 & -1 \end{pmatrix} \begin{pmatrix} 1+{\rm e}^{2^nx} & 0\\ 0 & 1-{\rm e}^{2^nx} \end{pmatrix} \begin{pmatrix} {1\over 2} & {1\over 2}\\ {1\over 2} & -{1\over 2} \end{pmatrix} \]

也就是

\[\begin{cases} A_{2^{n+1}}(x)+B_{2^{n+1}}(x)=(1+\exp(2^nx))(A_{2^n}(x)+B_{2^n}(x))\\ A_{2^{n+1}}(x)-B_{2^{n+1}}(x)=(1-\exp(2^nx))(A_{2^n}(x)-B_{2^n}(x)) \end{cases} \]

前者就不说了,根据定义 \(A_n(x)+B_n(x)=\sum_{i=0}^{n-1}\exp(ix)\),即自然数幂和的 \(\rm EGF\),直接用等比数列公式化简即可。而初值 \(A_1(x)=1,\;B_1(x)=0\) 使我们知道

\[A_{2^n}(x)-B_{2^n}(x)=\prod_{i=0}^{n-1}(1-\exp(2^ix)) \]

这看上去挺丑陋,且需要暴力多项式乘法。正当无奈之时,忽然发见 \(1-\exp(2^ix)\) 没有常数项!这说明 \(n\geqslant k{+}2\) 时,在我们所需的 \(\text{mod }x^k\) 范围内 \(A_{2^n}(x)-B_{2^n}(x)=0\) 。意外之喜。

再根据 “整体加是乘法”,可见 \(2^{k+2}\mid n\)\(B_n(x)\equiv\frac{A_n(x)+B_n(x)}{2}\),而右式是已经解决的问题。因此,我们只需要解决 \(2^{k+2}\lfloor{n\over 2^{k+2}}\rfloor\)\(n\) 这一小部分关卡的答案。这个问题近似于 \(0\)\(n\bmod 2^{k+2}\) 的问题,只不过最后要乘一个 \(\exp(2^{k+2}\lfloor{n\over 2^{k+2}}\rfloor x)\) 罢了。

用最普通的方法:枚举 \(\text{lcp}\),剩余部分是 \(A_{2^l}(x),B_{2^l}(x)\) 。预处理 \(l\in[0,k]\) 。乘法暴力做,复杂度 \(\mathcal O(k^3+\log n)\)代码就去看兔兔的咯


《HDU6593 Coefficient》

可以换元 \(g(x)=\frac{1}{b}f(x{+}x_0)=\frac{1}{c+\exp(ax)}\),因此我们就假定 \(b=1,\;d=x_0=0\) 吧。

根据 \(f'(x)=\frac{-a\exp(ax)}{(c+\exp(ax))^2}\),可以想到接下来的形式必然是 \(\sum\frac{f_{j}\exp(jax)}{(c+\exp(ax))^{j+1}}\) 。系数的变化规律是

\[\text{derivative's }f_j=ja\cdot(f_j-f_{j-1}) \]

\(a\) 是统一的,可忽略之,最后答案乘 \(a^n\) 。初值 \(f_0=1\) 。最后的答案就是 \({1\over n!}\sum_{j\geqslant 0}\frac{f_j}{(c{+}1)^{j+1}}\)

考虑系数的 “移动”(因为是线性变换),可见路径权值是 \((-1)^k\prod_{i=1}^{k}i^{q_i}\),其中 \(q_i\ne 0\)\(\sum q_i=n\),贡献到 \(f_k\) 。这就可以用 \(\rm OGF\) 轻易描述了:

\[f_k=[x^n](-1)^k\prod_{j=1}^{k}\frac{jx}{1-jx} \]

我不熟悉它,所以我没能指出:\(\prod_{j=1}^{k}\frac{x}{1-jx}\)第二类斯特林数 在第 \(k\) 列上的 \(\rm OGF\) 。其实想想 \(\prod_{i=1}^{k}i^{q_i}\) 不就是每次要么放进新盒子、要么放进已有的盒子,第二类斯特林数吗!

“你看到的只是表象。” —— 太阳神 \(\textsf{Tiw-Air-OAO}\)

因此 \(f_k=k!(-1)^k{n\brace k}\) 即得。用斯特林数在第 \(n\) 行上的 \(\rm OGF\) 去算即可。

再或者,我们可以换一种刺杀的方式。直接从生成函数的角度考虑它,答案就是

\[[x^n]\frac{1}{c+\exp(ax)} \]

吸取 “\(\text{Binomial Sum}\)” 的经验,只需把 \(F(x)=\frac{1}{1+c+x}\) 展开成

\[F(x)=(c{+}1)^{-1}\sum_{i=0}^{n}(-1)^i(c{+}1)^{-i} \]

我们先算出

\[[x^n](\text{e}^{ax}-1)^t=\sum_{i=0}^{t}{t\choose i}(-1)^{t-i}(ai)^n \]

Remark:把 \(a\) 去掉后,其实 \(\frac{1}{t!}(\text{e}^x{-}1)^t\) 就是第二类斯特林数在第 \(t\) 列上的 \(\rm EGF\) 。因此我们得到的也就是第二类斯特林数在第 \(n\) 行上的 \(\rm OGF\)

直接得到

\[ans=a^n\left[(c{+1})^{-1}\sum_{t=0}^{n}(c{+}1)^{-t}\sum_{i=0}^{t}{t\choose i}(-1)^{i}i^n\right] \]

系数 \(\sum_{i=0}^{t}{t\choose i}(-1)^{i}i^n\) 是简单卷积,然后对 \(q\)\((c{+}1)^{-1}\) 多点求值。复杂度 \(\mathcal O(n\log n+q\log^2 n)\)


《HDU6355 fireflies》

转最长反链。然后就没辙了。事实上,对于任意多重集 \(S\),设第 \(i\;(1\leqslant i\leqslant n)\) 种元素有 \(a_i\) 个。我们有

引理:存在对 \(S\) 进行 “对称链分解” 的方式,使得 \(S\) 的每个子集在恰好一条链中出现。

我们称子集链 \(T_1\subseteq T_2\subseteq\cdots\subseteq T_k\) 是对称链,当且仅当 \(|T_i|+1=|T_{i+1}|\)\(|T_1|+|T_k|=\sum a_i\) 。注意 \(k\) 可能为 \(1\),此时 \(|T_1|={a\over 2}\;(2\mid a)\)

证明:归纳构造。两个我不喜欢的名词\(n=0\)\(T_1=\varnothing\) 是一条链。然后每次加入 \(a\) 个元素 \(x\),对于原本的对称链 \(T_1\subseteq T_2\subseteq\cdots\subseteq T_k\),可将其变为 \(\min\{a{+}1,k\}\) 条对称链

\[\newcommand\ss[0]{\subseteq} \begin{cases} T_1\ss\cdots\ss T_k\ss T_k{+}\{1{\times}x\}\ss\cdots\ss T_k{+}\{a{\times}x\}\\ T_1{+}\{1{\times}x\}\ss\cdots\ss T_{k-1}{+}\{1{\times}x\}\ss T_{k-1}{+}\{2{\times}x\}\ss\cdots\ss T_{k-1}{+}\{a{\times}x\}\\ T_2{+}\{1{\times}x\}\ss\cdots\ss T_{k-2}{+}\{2{\times}x\}\ss T_{k-2}{+}\{3{\times}x\}\ss\cdots\ss T_{k-2}{+}\{a{\times}x\}\\ \cdots\\ T_1{+}\{a{\times}x\}\ss T_2{+}\{a{\times}x\}\ss\cdots\ss T_{k-a}{+}\{a{\times}x\} \end{cases} \]

我承认上面这一大坨有点吓人。可以画图来直观感受它。原本的链就是 \(T_i=(0,i)\),是 \(y\) 轴上的点,而现在 \([0,a]\) 成为 \(x\) 轴可选值。这个划分方式就是,先从 \((0,1)\) 开始,进行 “无脑搜索”——往上一直走,直到下一个点已走过,然后往右一直走。再从 \((1,1),(2,1),\dots,(\min\{a,k\},1)\) 分别进行 “无脑搜索”。

不难验证其仍为对称链。\(\blacksquare\)

注意到,大小为 \(M=\lfloor\frac{\sum a_i}{2}\rfloor\) 的子集在每个对称链里都出现了恰好一次。因此,这样的集合的数量就是最长反链的长度(我们构造出了其对应的链覆盖)。

剩下的部分就是折半、容斥。重点其实在于 \(\rm Lemma\)

\[\begin{aligned} &\sum_{i\in S}\sum_{j\in T}\alpha_i\beta_j{M-i-j+n-1\choose n-1}\\ =&\sum_{t=0}^{n-1}\sum_{i\in S}\alpha_i{M-i\choose t}\sum_{j\in T}\beta_j{n-1-j\choose n-1-t} \end{aligned} \]


《IOI2021 集训队互测 子集匹配》:设 \(\Bbb U=\{1,2,3,\dots,n\}\),记 \(\mathcal F_k=\{S\;|\;S\subseteq\Bbb U,\;|S|=k\}\) 。若 \(T\in\mathcal F_{k-1},\;S\in\mathcal F_k\) 满足 \(T\subseteq S\) 则二者之间连边。请构造大小为 \(|\mathcal F_k|\) 的匹配。保证 \(2n\geqslant 2k>n\)

用对称链构造即可。具体实现我不会,很尴尬。


《WC2021 斐波那契》

\[F(x)=(x+x^2)F(x)+a+(b-a)x \]

因此,记 \(f_n=[x^n]\frac{1}{1-x-x^2}\),也就是第 \(n\) 个斐波那契数(\(f_0=f_1=1\)),则题目等价于

\[af_{n}+(b{-}a)f_{n-1}\equiv 0\pmod{m} \]

不妨换元为

\[af_{n-1}\equiv bf_n\pmod{m} \]

考虑 分离变量,即把 \(f_{n-1},f_n\) 放到一边去。为实现之,我们需要互质性。因此可以同时给 \(a,b,m\) 除以 \(\gcd(a,b,m)\) 得到

\[a'f_{n-1}\equiv b'f_{n}\pmod{m'} \]

\(\gcd(a',b')\ne 1\) 则两边同时除以 \(\gcd(a',b')\)(该值与 \(m'\) 互质,存在逆元),故假定 \(\gcd(a',b')=1\) 。再结合最重要的 \(\gcd(f_{n-1},f_n)=1\),不难发现

\[\begin{aligned} \gcd(f_{n-1},m')&=\gcd(b',m')=g_b\\ \gcd(f_n,m')&=\gcd(a',m')=g_a \end{aligned} \]

于是等式两边和模数再同时除以 \(g_ag_b\)

\[\frac{a'}{g_a}\frac{f_{n-1}}{g_b}\equiv\frac{b'}{g_b}\frac{f_n}{g_a}\pmod{m'g_a^{-1}g_b^{-1}} \]

终于,每个数都与模数互质,可以移项。答案变为

\[\frac{f_ng_a^{-1}}{f_{n-1}g_b^{-1}}\equiv\frac{a'g_a^{-1}}{b'g_b^{-1}}\pmod{m'g_a^{-1}g_b^{-1}} \]

引理:斐波那契数列的循环节长度是 \(\mathcal O(m)\) 的,其中 \(m\) 是模数。

证明:由通项公式(或者说矩阵对角化),若 \(\phi_+=\frac{1+\sqrt{5}}{2}\)\(\phi_-=\frac{1-\sqrt{5}}{2}\) 都出现循环节 \(\phi_+^{\thinspace n}\equiv\phi_-^{\thinspace n}\equiv 1\pmod{m}\) 则原数列必循环。

\(2\) 取模时构成非纯循环,从 \(f_1\) 开始有长度为 \(2\) 的循环节,不作过多考虑。

首先考虑对奇质数 \(p\) 取模。认为运算在 \({\Bbb Z}_p(\sqrt 5)\) 下进行。

\[\phi_+^{\thinspace p}=\frac{1}{2^p}\sum_{i=0}^{p}{p\choose i}\sqrt{5}^i=\frac{1}{2}(1+\sqrt{5}^p)=\frac{1}{2}(1+5^{p-1\over 2}\sqrt{5}) \]

同理 \(\phi_{-}^{\thinspace p}=\frac{1}{2}(1-5^{p-1\over 2}\sqrt{5})\) 。若 \(5^{p-1\over 2}=1\)\(p\) 就是循环节;否则 \(5^{p-1\over 2}=-1\),有 \(\phi_+^{\thinspace p}=\phi_-,\;\phi_-^{\thinspace p}=\phi_+\) 说明

\[\phi_{+}^{2p+2}=\phi_-^{\thinspace 2}\phi_+^{\thinspace 2}=1 \]

同理 \(\phi_-^{2p+2}=1\),因此 \((2p{+}2)\) 是一个循环节。

Lemma. 若 \(a\equiv 1\pmod{p}\)\(a^{p^k}\equiv 1\pmod{p^{k+1}}\)

Proof. 归纳法。前提条件已保证 \(k=0\) 时成立。然后对 \(k\geqslant 1\)

\[\begin{aligned} a^{p^k}&=(a^{p^{k-1}})^p=(1+tp^k)^p\\ &=\sum_{i=0}^p(tp^k)^i{p\choose i}\equiv 1+(tp^k)^1{p\choose 1}\equiv 1 \end{aligned} \]

上式中 \(i>1\)\(p^{ki}\bmod p^{k+1}=0\),因此可忽略。\(\blacksquare\)

然后考虑对 \(p^k\) 取模。由 \(\rm Lemma\)\((\phi_{\pm}^{\thinspace m})^{p^{k-1}}\equiv 1\pmod{p^k}\),因此有循环节 \(mp^{k-1}\),其中 \(m\in\{2p{+}2,\;p\}\) 为上文中 “对 \(p\) 取模” 的循环节。

最后对合数 \(m=\prod p_i^{t_i}\) 取模,至少有循环节 \(\text{lcm}\{m_i\}\),而 \(m_i\in\{(2p_i{+}2)p_i^{t_i-1},\;p_i^{t_i}\}\),因此 \(\text{lcm}\{m_i\}\leqslant 2\prod(p_i^{t_i}+p_i^{t_i-1})=2m\prod(1+p_i^{-1})=\mathcal O(m)\)\(\blacksquare\)

Remark:这个值究竟是不是 \(\mathcal O(m)\),存疑。

根据引理,我们可以暴力求解。把询问以三元组 \((g_a,g_b,\frac{a'g_a^{-1}}{b'g_b^{-1}})\) 形式放在 \(m'g_a^{-1}g_b^{-1}\) 的桶里,其中 \(g_a=\gcd(a',m'),\;g_b=\gcd(b',m')\) 。最后,对每个 \(d\mid m\),以 \(d\) 为模数求斐波那契数列,查询是否有三元组满足 \(g_a=\gcd(f_n,m'),\;g_b=\gcd(f_{n-1},m')\) 且第三个值为比值。

复杂度最多为 \(\mathcal O(\sigma_1(m)\log m+q\log m)\),其中 \(\sigma_1(m)\) 为约数和。

“这个算法当初是我自己独立提出的!(叉腰)” —— 傲娇 \(\textsf{Tiw-Air-OAO}\)


《AGC021F Trinity》

读者应该能从我的水平推断出:我连 \(\tt dp\) 都没写出来。

要往 \(\tt dp\) 的方向想,而不是直接 \(\rm GF\) 。设 \(f_{m,n}\)\(m\)\(n\) 行的答案,枚举最后一列进行转移。

\[f_{m,n}=\left[{n\choose 0}+{n\choose 1}+{n\choose 2}\right]f_{m-1,n}+\sum_{i=1}^{n}{n+2\choose i+2}f_{m-1,n-i} \]

前者是 \(A_j\ne m\) 时,考虑该列的 \((B_m,C_m)\) 数量。后者枚举了 \(A_j=m\) 的数量,根据 \((B_m,C_m)\) 是否为其中一员,可知方案数为

\[{n\choose i}+2{n\choose i+1}+{n\choose i+2}={n+2\choose i+2} \]

然后考虑卷积优化,记 \(F_m(x)=\sum_{n\geqslant 0}f_{m,n}\frac{x^n}{n!}\)

\[F_m(x)=\text{e}^xF_{m-1}(x)+(2\text{e}^x{-}x{-}2)F'_{m-1}(x)+(\text{e}^x{-}x{-}1)F''_{m-1}(x) \]

立刻有 \(\mathcal O(mn\log n)\) 做法。可是我们惊讶地发现,将 \(y=\text{e}^x\) 看成新变元,则这是 \(\mathcal O(m^2)\) 大小的二元生成函数。因此最后得到 \(F_m(x)=\sum_{i=0}^{m}\sum_{j=0}^mc_{m,i,j}x^i\exp(jx)\)\(\mathcal O(m^3)\) 的,与 \(n\) 无关!

最后答案为 \(\sum_{i=0}^{n}{n\choose i}f_{m,i}=[{x^n\over n!}]\text{e}^xF_m(x)\) 。可以 \(\mathcal O(m^2)\) 提取系数。时间复杂度 \(\mathcal O(m^3)\)

posted @ 2022-06-30 17:06  OneInDark  阅读(94)  评论(0编辑  收藏  举报