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\) 的生成函数为 \(F(x)\),则
令 \(G(x)\) 为 \(n\) 次多项式,\(G_R(x)\) 表示 \(G\) 的系数翻转后的多项式,则 \(G(x)=x^n G_R(\frac 1x)\)
令 \(F\circ y=F(y)\),则
其中 \(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\)

浙公网安备 33010602011771号