杂题泛做

[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)\)

\[B(x)=\sum b_jx^j=\sum_{i=0}a_i(\sum_{j=i}\dbinom{2j-i}{j-i}x^j) \]

\(F_i(x)=\sum\limits_{j}\binom{2j-i}{j-i}x^j\) ,则:

\[\begin{aligned}F_i(x)&=\sum_j \left(\dbinom{2j-i+1}{j-i+1}-\dbinom{2j-i}{j-i+1}\right)x^j\\&=F_{i-1}(x)-xF_{i-2}(x)\end{aligned} \]

手算 \(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}}\) ,因此:

\[\begin{aligned}B(x)&=\sum_{i}a_iF_i(x)=\frac{A(\frac{1-\sqrt{1-4x}}{2})}{\sqrt{1-4x}}\end{aligned} \]

不妨先计算 \(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

\[\begin{aligned}\sum_{i=0}^{n}\dbinom{n}{i}i^k&=\sum_{i=0}^{n}\dbinom{n}{i}\sum_{j=0}^{k}{k \brace j}i^{\underline j}\\&=\sum_{j=0}^{k}{k\brace j}n^{\underline j}2^{n-j}\\&=\sum_{i=0}^{k}i^k\dbinom{n}{i}2^{n-i}\sum_{j=0}^{k-i}\dbinom{n-i}{j}\left(-\frac{1}{2}\right)^j\end{aligned} \]

\(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)\)

\[\begin{aligned}f(x,y)&=\sum_{j=0}^{y}\dbinom{x}{j}\left(-\frac 12\right)^j\\&=\sum_{j=0}^{y}\dbinom{x-1}{j}\left(-\frac 12\right)^j+\sum_{j=0}^{y-1}\dbinom{x-1}{j}\left(-\frac 12\right)^{j+1}\\&=\frac 12 f(x-1,y)-\dbinom{x-1}{y}\left(-\frac 12\right)^{y+1}\end{aligned} \]

时间复杂度 \(\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)}\) ,推柿子:

\[\begin{aligned}&\sum_{1\le j\le i}[\gcd(i,j)=1]f_{\gcd(i,d+j)}\\&=\sum_{1\le j\le i}[\gcd(i,j)=1]\sum_k[k|\gcd(i,d+j)]h_k\\&=\sum_{1\le j\le i}[\gcd(i,j)=1]\sum_k[k|i][k|d+j]h_k\\&=\sum_{i}\sum_{k|i}h_k\sum_{1\le j\le i}[\gcd(i,j)=1][j\equiv -d \pmod k]\end{aligned} \]

注意到若 \(\gcd(k,d)\neq 1\) ,则 \(i\)\(j\) 起码有 \(\gcd(k,d)\) 的公因子,破坏第一个 bool 表达式,因此只能 \(\gcd(k,d)=1\)

\[\begin{aligned}&=\sum_{i}\sum_{k|i}[\gcd(k,d)=1]h_k\frac{\varphi(i)}{\varphi(k)}\\&=\sum_{k}[\gcd(k,d)=1]h_k\frac{\sum\limits_{1\le i\le n}[k|i]\varphi(i)}{\varphi(k)}\end{aligned} \]

问题转化为求解 \(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\) 的链对应的容斥系数,有:

\[A(x)+A^2(x)+A^3(x)+...=\frac{1}{1-A(x)}-1 \]

我们希望长度小于 \(2\) 的区间被统计的次数为 \(0\) ,长度 \(\ge 2\) 的区间被统计的次数为 \(1\) :

\[\frac{1}{1-A(x)}-1=\frac{x^2}{1-x} \]

\[A(x)=\frac{x^2}{x^2-x+1} \]

"虚假"的极长链的贡献为 \(f_{len}=\left( [x^{len}]\frac{x^2}{x^2-x+1}\right)\times len\times n\)

枚举极长链的个数,最终的答案为

\[n^{-2}\sum\limits_{i=0}^{n}[x^n]F^i(x) \]

\[=n^{-2}[x^n]\frac{1}{1-F} \]

多项式求逆即可,时间复杂度 \(O(nlogn)\)

posted @ 2021-01-20 19:05  wlzhouzhuan  阅读(270)  评论(0编辑  收藏  举报