2025.3.25 NOI 模拟赛 题解
div2 T1 #P10268. 除法
题意
给定序列 \(a_{1\sim n}\),\(q\) 次操作单点修改,或给定 \(y\) 求 \(\sum_{i=1}^n (\lfloor\frac y{a_i}\rfloor+(y\bmod {a_i}))\),\(n,q\le10^5,a_i\le2\times10^5\)
分析
拆为求 \(\sum_{i=1}^n\lfloor\frac y{a_i}\rfloor\) 和 \(\sum_{i=1}^na_i\lfloor\frac y{a_i}\rfloor\),发现答案只和 \(a_i\) 构成的可重集有关
使用类似数论分块的方式,每次查询拆为 \(O(\sqrt V)\) 次求区间和,每次修改拆为 \(O(1)\) 次单点修改
可值域分块做到 \(O(q\sqrt V)\),树状数组的 \(O(q\sqrt V\log V)\) 也可过
div1 T1 div2 T2 #18037. 哈密顿
题意
一张图 \(n\) 个点为 \(0\sim n-1\),\(i\) 向 \(2i\bmod n\) 和 \((2i-1)\bmod n\) 连有向边,对于所有 \(2\mid n,n\le 500\) 分别求出图的一条哈密顿回路或判定无解
分析
方法 1
暴力搜索,在本地求出答案,总输出量在 \(150\text K\) 左右,本题码长限制在 \(128\text K\),可通过一定方式压缩输出卡码长
方法 2
建立反图,在反图上求,时间复杂度未知但可过,需要逆序输出
方法 3
\(n=500\) 时合法的回路数量大约有 \(0.18\%\),每次随一条可过
方法 4
发现 \(x\) 和 \(x+\frac n2\) 的出边相同,即两条边分别分配给两个点,建立 \(\frac n2\) 个点 \(n\) 边的图,连边方式相同,求出这张图的欧拉回路,对应原图上的哈密顿回路,时间复杂度 \(O(\sum n)\)
div1 T2 div2 T3 #18038. 树
题意
给定一棵树,每个点有权值 \(d_i\),对于每个 \(i\),求出 \(\sum_{j=1}^n [\exists x,\text{dis}(i,x)\le d_x\land \text{dis}(j,x)\le d_x]\),\(n\le10^6\)
分析
对于每条边 \((u,v)\),令 \(d_u\gets\max(d_u,d_v-1)\)(这一过程通过类似 \(\text{dijkstra}\) 的过程实现)
经过转化答案显然不变,但是原本的条件 \([\exists x,\text{dis}(i,x)\le d_x\land \text{dis}(j,x)\le d_x]\) 可加强为 \([\exists x\in\text{path}(i,j),\text{dis}(i,x)\le d_x\land \text{dis}(j,x)\le d_x]\)
于是对于每组 \((i,j)\) 是否合法,只需要考虑路径 \(i-j\) 即可
考虑点分治,设分治中心为 \(Md\),需要处理 \(i=Md\lor j=Md\) 或 \(i,j\) 在 \(Md\) 不同子树内的 \((i,j)\)
设 \(Md\) 的子树为 \(St_{1\sim c}\),令 \(dep_u\) 表示 \(u\) 到 \(Md\) 的距离
则对于每个 \(i\in St_x\;(1\le x\le c)\),需要求出
考虑对于每个 \(i\in St_x\) 求出 \(a_i=\max_{u\in\text{path}(i,Md),dep_i-dep_u\le d_u}d_u-dep_u\),则上述条件转化为
令 \(St=\bigcup_{i=1}^c St_i\),可拆为
因此原问题拆为两个子问题:对于每个 \(i\in St_x\),求出 \(a_i\);给定集合 \(S\),对于每个 \(i\in S\) 求出 \(\sum_{j\in S}[a_i\ge dep_j\lor a_j\ge dep_i]\)
先考虑前者
在对 \(St_x\) \(\text {dfs}\) 的过程中,令 \(cu\) 为当前遍历到的点,维护 \(ft_i=\max_{u\in\text{path}(cu,Md),d_u+dep_u=i}d_u-dep_u\),则 \(a_{cu}=ft_{dep_{cu}}\)
令 \(mxdp=\max_{u\in St_x}dep_u\)
令 \(fa_u\) 为取 \(Md\) 为根时 \(u\) 的父亲,由于 \(d_{fa_u}-1\le d_u\),\(dep_u=dep_{fa_u}+1\),可得
因此从 \(fa_u\) 到 \(u\) 后,只要令 \(ft\) 的区间 \((\min(mxdp,d_{fa_u}+dep_{fa_u}),\min(mxdp,d_u+dep_u)]\) 赋为 \(d_u-dep_u\) 即可,对于一个 \(St_x\) 时间复杂度为 \(O(|St_x|)\)
然后考虑后者
显然为静态二维偏序问题,可以 \(O(|S|\log |S|)\) 解决,这样总时间复杂度为 \(O(n\log^2 n)\),可能可以过
考虑优化最后一部分
发现 \([a_i\ge dep_j\lor a_j\ge dep_i]\) 等价于 \([(dep_i\le dep_j\land dep_i\le a_j)]+[(dep_i>dep_j\land a_i\ge dep_j)]\),而两者都可前缀和优化到 \(O(|S|)\)(因为 \(mxdp=O(|S|)\))
这样总时间复杂度为 \(O(n\log n)\)
div1 T3 #18039. 扑克牌
题意
一个隐藏数组 \(a_{1\sim n}\),\(2\mid n\),\(1\sim n\frac n2\) 各有两个,一次询问 \((x,y)\) 会返回 \(\{a_x\}\cup\{a_y\}\) 并随机交换两者,通过不超过 \(92000\) 次询问确定目前为止的序列,\(n\le10^5\)
分析
存在若干 \(\text{hack}\) 交互库的做法:1 2 3
比赛结果
\(100+100+30+20\),\(\text{div1}\) \(\text{rk}24\),\(\text{div2}\) \(\text{rk}1\)

浙公网安备 33010602011771号