醉里挑灯看太阳神
《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)\) 。根据题目直接有
我们讨厌 “换手搓背”,我们希望独立递推,也许进而可知通解——矩阵对角化。
也就是
前者就不说了,根据定义 \(A_n(x)+B_n(x)=\sum_{i=0}^{n-1}\exp(ix)\),即自然数幂和的 \(\rm EGF\),直接用等比数列公式化简即可。而初值 \(A_1(x)=1,\;B_1(x)=0\) 使我们知道
这看上去挺丑陋,且需要暴力多项式乘法。正当无奈之时,忽然发见 \(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}}\) 。系数的变化规律是
\(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\) 轻易描述了:
我不熟悉它,所以我没能指出:\(\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\) 去算即可。
再或者,我们可以换一种刺杀的方式。直接从生成函数的角度考虑它,答案就是
吸取 “\(\text{Binomial Sum}\)” 的经验,只需把 \(F(x)=\frac{1}{1+c+x}\) 展开成
我们先算出
Remark:把 \(a\) 去掉后,其实 \(\frac{1}{t!}(\text{e}^x{-}1)^t\) 就是第二类斯特林数在第 \(t\) 列上的 \(\rm EGF\) 。因此我们得到的也就是第二类斯特林数在第 \(n\) 行上的 \(\rm OGF\) 。
直接得到
系数 \(\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\}\) 条对称链
我承认上面这一大坨有点吓人。可以画图来直观感受它。原本的链就是 \(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\) 。
《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_n=[x^n]\frac{1}{1-x-x^2}\),也就是第 \(n\) 个斐波那契数(\(f_0=f_1=1\)),则题目等价于
不妨换元为
考虑 分离变量,即把 \(f_{n-1},f_n\) 放到一边去。为实现之,我们需要互质性。因此可以同时给 \(a,b,m\) 除以 \(\gcd(a,b,m)\) 得到
若 \(\gcd(a',b')\ne 1\) 则两边同时除以 \(\gcd(a',b')\)(该值与 \(m'\) 互质,存在逆元),故假定 \(\gcd(a',b')=1\) 。再结合最重要的 \(\gcd(f_{n-1},f_n)=1\),不难发现
于是等式两边和模数再同时除以 \(g_ag_b\) 得
终于,每个数都与模数互质,可以移项。答案变为
引理:斐波那契数列的循环节长度是 \(\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}(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}=1\),因此 \((2p{+}2)\) 是一个循环节。
Lemma. 若 \(a\equiv 1\pmod{p}\) 则 \(a^{p^k}\equiv 1\pmod{p^{k+1}}\) 。
Proof. 归纳法。前提条件已保证 \(k=0\) 时成立。然后对 \(k\geqslant 1\) 有
上式中 \(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\) 行的答案,枚举最后一列进行转移。
前者是 \(A_j\ne m\) 时,考虑该列的 \((B_m,C_m)\) 数量。后者枚举了 \(A_j=m\) 的数量,根据 \((B_m,C_m)\) 是否为其中一员,可知方案数为
然后考虑卷积优化,记 \(F_m(x)=\sum_{n\geqslant 0}f_{m,n}\frac{x^n}{n!}\) 则
立刻有 \(\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)\) 。
如果这篇文章对你有帮助,那么作者是:OneInDark,原文在:https://www.cnblogs.com/OneInDark/p/16427656.html,否则我也不知道这是谁的文章。