杂题泛做
[20210623联考] B
给定长为 \(n\) 和序列 \(a_0,\cdots,a_n\) ,对于 \(j=0\sim n\) 求 \(b_j=\sum\limits_{i=0}^{j}\binom{2j-i}{j-i}a_i\) ,答案对 \(998244353\) 取模。
\(n\le 10^6\) 。
时间限制 \(\text{1500ms}\)
Solution
考虑答案的生成函数 \(B(x)\) :
记 \(F_i(x)=\sum\limits_{j}\binom{2j-i}{j-i}x^j\) ,则:
手算 \(F_0(x)=\frac{1}{\sqrt{1-4x}},F_1(x)=\frac{1-\sqrt{1-4x}}{\sqrt{1-4x}}\) ,由特征方程得出 \(F_i(x)=\frac{\left(\frac{1-\sqrt{1-4x}}{2}\right)^i}{\sqrt{1-4x}}\) ,因此:
不妨先计算 \(A(\frac{1-t}{2})\) ,得到 \(\sum A'_i t^i\) ,再代入 \(t=\sqrt{1-4x}\) 计算,对于奇偶项分别计算即可。
分母的 \(\sqrt{1-4x}\) 直接手动求逆,卷积即可。
时间复杂度 \(\mathcal O(n\log n)\) 。
省选养成计划前期2 A
给定 \(n,k\) ,求 \(\sum\limits_{i=0}^{n} \dbinom{n}{i} i^k \bmod 998244353\) 。
\(1\le n\le 10^9,1\le k\le 10^7\) 。
Solution
令 \(f(x,y)=\sum\limits_{j=0}^{y}\dbinom{x}{j}\left(-\frac{1}{2}\right)^j\) ,则原式 \(=\sum\limits_{i=0}^{k}i^k\dbinom{n}{i}2^{n-i}f(n-i,k-i)\) 。
注意 \(f(x,y)\to f(x,y\pm 1)\) 转移是简单的,考虑 \(f(x-1,y)\to f(x,y)\) :
时间复杂度 \(\mathcal O(k)\) 。
[省选养成计划后期#15] 第三题
给定一个长为 \(n\) 的序列 \(a_1,\cdots, a_n\) ,对于 \(k\in [1,n]\) ,求出 \(a_1,\cdots,a_k\) 中第 \(\lceil \frac k 2\rceil\) 小的数。
\(1\le n\le 3\times 10^7\) ,数据保证随机。
Solution
对于 \(\mathcal O(n\log n)\) ,建出对顶堆(即大根堆+小根堆,root 相连)。
现在定义 "类对顶堆" 为 大根堆+中间 \(B\) 个数+小根堆。
对于插入:
-
有 \(\frac{B}{k}\) 的概率插到中间,此时有一个数会进入大根堆中。
复杂度 \(\mathcal O(\frac{B}{k} \times (B+\log n))\) ;
-
有 \(1-\frac{B}{k}\) 的概率插到堆中,注意到随机插入堆中,它第 \(i\) 次 up 操作需满足在 \(2^{i+1}-1\) 个数中最小(大),概率是 \(\frac{1}{2^{i+1}-1}\) 。
复杂度期望 \(\mathcal O(1)\) 。
对于查询:
-
中位数被挤到了大(小)根堆。此时需要重构,把中位数提到中间的第 \(\frac{B}{2}\) 个位置。重构的概率可以证明是 \(\frac{1}{B^2}\) 的。
复杂度期望 \(\mathcal O(\frac{1}{B}\log n)\) 。
时间复杂度 \(\mathcal O(n+B^2\log n+B\log^2n+\frac{n}{B}\log n)\) 。
取 \(B=n^{1/3}\) ,最优复杂度 \(\mathcal O(n+n^{2/3}\log n)\) 。
计蒜之道决赛D2T2 类斐波那契数据分析
定义 \(\text{k-}\) 斐波那契数列为 \(f_n=kf_{n-1}+f_{n-2},f_0=0,f_1=1\) 。
令 \(g_i=f_{i+d}\) ,求 \(\sum\limits_{1\le i\le n}\sum\limits_{1\le j\le i \\ \gcd(i,j)=1}\gcd(f_i,g_j)\) ,答案对 \(m\) 取模。
\(1\le T\le 10^4,1\le n\le 10^6,1\le \sum n\le 5\times 10^6, 0\le d,k,m\le 2^{30},m\ge 2\) 。
时间限制 \(\text{2000ms}\)
空间限制 \(\text{256MB}\)
Solution
显然 \(\gcd(f_i,g_j)=\gcd(f_i,f_{d+j})=f_{\gcd(i,d+j)}\) ,推柿子:
注意到若 \(\gcd(k,d)\neq 1\) ,则 \(i\) 和 \(j\) 起码有 \(\gcd(k,d)\) 的公因子,破坏第一个 bool 表达式,因此只能 \(\gcd(k,d)=1\) 。
问题转化为求解 \(h\) ,注意到 \(f_n=\sum\limits_{d|n}h_d\) ,莫反得 \(h_n=\sum\limits_{d|n}\mu(\frac{n}{d}) f_d\) 。
时间复杂度 \(\mathcal O(\sum n \log n)\) ,空间复杂度 \(\mathcal O(n)\) 。
[EA练习赛2] 计树
最终的树一定是若干条极长链拼接而成的,一条链的 \(OGF\) 即为 \(\sum\limits_{i\ge 2}x^i=\frac{x^2}{1-x}\) 。
引理:对于一个划分 \(len_1,len_2,...,len_m\) ,它的拼接方案数为
\[n^{m-2}\prod\limits_{i=1}^{m}len_i \]证明:将一条极长链看作一个点,枚举它的度数,每个度数有 \(len_i\) 种连法,则根据 \(\text{prufer}\) 序列有:
\[\sum\limits_{\sum\limits_{i}(deg_i-1)=m-2}\frac{(m-2)!}{\prod\limits_{i}(deg_i-1)!}\prod\limits_{i}len_i^{deg_i} \]\[=\left(\prod_{i}len_i\right)\left((m-2)![x^{m-2}]\prod_{i}e^{len_ix}\right) \]\[=n^{m-2}\prod_{i=1}^{m}len_i \]
由于一条极长链可能被算重(它的几个子链拼接出来),考虑容斥掉几个拼起来的情况。记 \(A(x)\) 表示容斥系数的生成函数,\(x^i\) 项的系数表示长度为 \(i\) 的链对应的容斥系数,有:
我们希望长度小于 \(2\) 的区间被统计的次数为 \(0\) ,长度 \(\ge 2\) 的区间被统计的次数为 \(1\) :
"虚假"的极长链的贡献为 \(f_{len}=\left( [x^{len}]\frac{x^2}{x^2-x+1}\right)\times len\times n\) 。
枚举极长链的个数,最终的答案为
多项式求逆即可,时间复杂度 \(O(nlogn)\) 。