2025.5.26 NOI 模拟赛 题解

比赛

T1 NFLS #18367. 生活美好没烦恼

题意

定义序列 \(A\) 的子序列 \(S\) 合法当且仅当 \(A\) 中任意一对相邻的元素不同时在 \(S\) 内,定义序列的值为其所有非空合法子序列的值,特别地若序列长为 \(1\) 则其值为序列中唯一一个元素的值,给定 \(a_{1\sim n}\) 求出它的值,\(n\le2\times10^5\)

分析

\(f_i\) 表示长为 \(i\) 的序列,每次选择其一个合法子序列,强制不含第一个元素,最终清空的方案数,则答案为 \(\sum_i a_i f_{i-1}f_{n-i}\)\(f_0=1\),转移为

\[f_i=\sum_{0\le j<i}\binom{i-j}j f_j \]

\(f\) 的生成函数为 \(F(x)\),则

\[\begin{aligned} F(x)=&\sum_{i\ge 0} x^if_i\\ =&\sum_{i\ge 0} x^i \sum_{0\le j\le\lfloor\frac i2\rfloor}\binom{i-j}j f_j\\ =&\sum_{j\ge 0} f_j \sum_{i\ge 2j} \binom{i-j}j x^i\\ =&\sum_{j\ge 0} f_j \sum_{i\ge j} \binom ij x^{i+j}\\ =&\sum_{j\ge 0} f_j x^j \sum_{i\ge j} \binom ij x^i\\ =&\sum_{j\ge 0} f_j x^j \sum_{i\ge 0} \binom {i+j}j x^{i+j}\\ =&\sum_{j\ge 0} f_j x^{2j} \sum_{i\ge 0} \binom {i+j}j x^i\\ =&\sum_{j\ge 0} f_j\cdot\frac{x^{2j}}{(1-x)^{j+1}}\\ =&\frac1{1-x} \sum_{i\ge 0} f_i \left(\frac{x^2}{1-x}\right)^i\\ =&\frac1{1-x} F\left(\frac{x^2}{1-x}\right)\\ \end{aligned} \]

\(G(x)\)\(n\) 次多项式,\(G_R(x)\) 表示 \(G\) 的系数翻转后的多项式,则 \(G(x)=x^n G_R(\frac 1x)\)

\(F\circ y=F(y)\),则

\[\begin{aligned} G\left(\frac{x^2}{1-x}\right)=&\left(\frac{x^2}{1-x}\right)^nG_R\left(\frac{1-x}{x^2}\right)\\ =&\left(\frac{x^2}{1-x}\right)^nG_R\left(\left(\frac1x-\frac12\right)^2-\frac14\right)\\ =&\left(\frac{x^2}{1-x}\right)^n\left(\left(G_R\circ\left(x-\frac14\right)\circ x^2\circ \left(x-\frac12\right)\right)\circ \frac1x\right)\\ =&\left(\frac{x^2}{1-x}\right)^n\frac1{x^{2n}}\left(G_R\circ\left(x-\frac14\right)\circ x^2\circ\left(x-\frac12\right)\right)_R\\ =&\left(\frac{1}{1-x}\right)^n\left(G_R\circ\left(x-\frac14\right)\circ x^2\circ\left(x-\frac12\right)\right)_R\\ \end{aligned} \]

其中 \(G\)\(n\) 次多项式,\(G\left(\frac{x^2}{1-x}\right)\)\(2n\) 次多项式(中间一次 \(\circ\;\; x^2\) 令最高次由 \(x^n\) 变为 \(x^{2n}\)

因此只要计算 \(O(\log n)\) 轮即可,多项式平移可以 \(O(n\log n)\) 解决,因此总时间复杂度 \(O(n\log n)\)

代码

参考

T2 NFLS #18368. 最棒题目人人赞叹你

题意

\(n\) 条未知线段 \(k_ix+b_i\),其中 \(k_i\ne 0\),两两不同,有正有负,要求出 \(\max_i k_ix+b_i\) 取到最小的 \(x\),显然存在且唯一,可以向交互库进行三种询问,\(\text{cmp}(x,y)\) 返回编号为 \(x\) 的浮点数和编号为 \(y\) 的浮点数的大小关系(\(1/0/-1\)),\(\text{sign}(i)\) 返回 \(\text{sgn}(k_i)\)\(\text{intersection}(i,j)\) 返回线段 \(i,j\) 交点的 \(x\) 坐标的浮点数编号和 \(k_i,k_j\) 比较的结果(\(1/-1\)),询问一次数不限,询问二至多进行 \(100\) 次,操作三至多进行 \(4n\) 次,要求返回答案对应的浮点数编号,\(n\le5\times10^5\),多测 \(\sum n\le10^6\)

分析

假设已经求出凸壳上直线编号依次为 \(id_{1\sim t}\),则 \(id\) 的一个前缀的 \(k\)\(-1\),剩余后缀的 \(k\)\(1\),可以二分出交界点,得到答案,这样询问二的次数为 \(O(\log n)\) 的,可以接受

考虑如何求出凸包

选出 \(k\) 最小的放在第一个,使用 \(n-1\) 次操作三,然后使用 \(n-1\) 次操作三求出其它直线与第一条直线的交点的 \(x\) 坐标,按 \(x\) 坐标从小到大排序

然后依次扫描 \(n\) 条线段,并记录目前为止凸包的序列 \(S\),若当前加入直线斜率小于 \(S\) 最后一条直线,则忽略当前直线,否则弹栈直到当前直线合法,并加入当前直线

对操作三记忆化可保证操作次数

代码

参考

T3 NFLS #18369. 今晚没番茄否则我会吼叫

比赛结果

\(54+50+30\)\(\text{rk}14\)

posted @ 2025-05-29 19:29  Hstry  阅读(18)  评论(0)    收藏  举报