2025.9.17 NOIP 模拟赛 题解
T1 P130019 地球往事 \(\quad\) QOJ #10753. Connected Components
题意
给定 \(a_{1\sim n}\) 和 \(b_{1\sim n}\),若 \(a_i-a_j\le i-j\le b_i-b_j\) 或 \(a_i-a_j\ge i-j\ge b_i-b_j\) 则合并 \(i,j\) 所在连通块,求最终连通块数量,\(n\le10^6\)
分析
两个条件处理方式类似,以第一个为例,令 \(a_i\gets i-a_i,b_i\gets b_i-i\),则一个 \(i\) 需要与 \(a_j\le a_i,b_j\le b_i\) 的 \(j\) 合并
以 \(a\) 为第一关键字,\(b\) 为第二关键字从小到大排序,然后分治,容易双指针处理
时间复杂度 \(O(n\log n\alpha(n))\)
T2 P130020 纪元 \(\quad\) QOJ #8234. Period of a String
题意
给定 \(s_{1\sim n}\),判断能否重排所有 \(s_i\) 使得对于任意 \(i>1,0\le l<|s_i|\),有 \(s_{i,l}=s_{i-1,l\bmod |s_{i-1}|}\),若可以则构造具体方案,多测 \(T\le10^4,\sum n\le10^5,\sum|s_i|\le5\times10^6\)
分析
显然确定 \(s_1\) 后,\(s_{2\sim n}\) 都是唯一确定的
考虑一个 \(s_i\) 能对 \(s_1\) 提供什么信息
找到 \(i\) 之前第一个 \(|s_p|<|s_i|\) 的 \(p\)(若不存在则为 \(0\)),对于任意 \(p<x<i\),显然 \(s_i\) 为 \(s_p\) 的前缀,若 \(p=0\) 则提供一条信息:\(s_1\) 长度为 \(|s_i|\) 的前缀中,各种字母出现次数等于 \(s_i\) 中对应出现次数
若 \(p>0\),则 \(s_i\) 为 \(s_p\) 重复无穷次后取长度为 \(|s_i|\) 的前缀得到的,一共 \(\left\lfloor\frac{|s_i|}{|s_p|}\right\rfloor\) 个完整的 \(s_p\) 和一个长度为 \(|s_i|\bmod |s_p|\) 的前缀
由此可以得到长度为 \(|s_i|\bmod |s_p|\) 的后缀中各种字母出现次数(若 \(|s_i|\bmod |s_p|=0\) 则结束),令 \(s_i\gets |s_i|\bmod |s_p|\) 后继续向前处理,直到 \(p=0\) 为止
这样得到 \(O(n)\) 个限制,每个限制了 \(s_1\) 某个前缀中各种字母的出现次数
根据这些限制构造合法的 \(s_1\) 是容易的
然后推出 \(s_{2\sim n}\),并检验即可
时间复杂度 \(O(\sum (n\log |s_i|(\log n+|\sum|)+\sum|s_i|\log|s_i|))\)
T3 P130021 黑暗森林 \(\quad\) gym105170A. Eminor Array
将 \(1\sim 2^n-1\) 根据二进制下最高位划分为 \(0~n-1\) 这 \(n\) 块
令 \(f_i\) 表示最后一个值在 \(i\) 块中且满足题目要求的序列,则答案为 \(\sum_{i=0}^{n-1} f_i\)
若所有数字都在第 \(i\) 块中,显然任意相邻三个的异或不为 \(0\),从 \(2^i\) 个数中选非空子集,方案数为 \(2^{2^i}-1\)
否则枚举 \(0\le j<i\),表示 \(j+1\sim i-1\) 块中没有数字,\(j\) 块中选择数字
考虑从 \(f_j(2^{2^i}-1)\) 中减去不合法的方案数
即 \(0\le j\) 和 \(i\) 之间产生了不合法的 \((x,y,z)\),且 \(x<y<z\),\(x<2^{j+1}\),\(2^i\le z<2^{i+1}\)
若 \(y<2^{j+1}\) 则显然 \(x\oplus y\oplus z\ge 2^i\),因此 \(2^i\le y<z<2^{i+1}\),因此 \(2^j\le x<2^{j+1}\)
而 \(y=x\oplus z\),\(x\) 第 \(j\) 位为 \(1\),要使 \(y<z\),必须 \(z\) 的第 \(j\) 位为 \(1\)
因此枚举 \(2^i\le z<2^{i+1}\) 且 \(j\in z\),\((z,2^{i+1})\) 中的方案数为 \(2^{2^{i+1}-z-1}\),\([1,2^{j+1})\) 中方案数为 \(f_j\),\(y\) 根据 \([1,2^{j+1})\) 中的情况和 \(z\) 唯一确定
即转移为
考虑化简 \(\sum_{2^i\le z<2^{i+1},j\in z}2^{2^{i+1}-z-1}\)
显然 \([2^i,2^{i+1})\) 中 \(j\in z\) 和 \(j\notin z\) 的方案数一致,且贡献 \(2^{2^{i+1}-z-1}\) 中 \(j\notin z\) 恰好为 \(j\in z\) 的 \(2^{2^j}\) 倍,可知
从而转移变为
容易前缀和优化
时间复杂度 \(O(n\log M)\),其中 \(M\) 为模数
实际上 \(f\) 有通项公式
对于
设
即
则
因此
即答案为
但无法优化复杂度
T4 P130022 死神永生 \(\quad\) CF1783G Weighed Tree Radius
题意
给定 \(n\) 点的树和 \(a_{1\sim n}\),\(m\) 次 \(a\) 的单点修改,所有修改前和每次操作后求出 \(\min_u \max_v (\text{dis}(u,v)+a_v)\),\(n,m\le2\times10^5\)
分析
每个 \(u\) 下挂两个点,边权都是 \(a_u\),则转化为求出 \(\min_u \max_v\text{dis}(u,v)\),即求树的直径的一半
离线线段树分治,转化为加入一个点维护重心,容易做到 \(O(m\log m)\)
比赛结果
\(50+70+40+0\),\(\text{rk}50\)

浙公网安备 33010602011771号