2025.8.30 NOIP 模拟赛 题解

比赛

订正

T1 P110124 Mex

题意

给定 \(a_{1\sim n},b_{1\sim n}\),对于所有 \(s_i\in\{a_i,b_i\}\),求出 \(\text{mex} \{s\}\) 的最小值及对应方案数,\(n\le10^5\)

分析

显然最小值为最小的 \(x\ge 0\) 使得不存在 \(i\) 满足 \(a_i=b_i=x\),设 \(\text{mex}\) 的最小值为 \(mn\),对应方案数为 \(2^{\sum_i [a_i\ne mn\land b_i\ne mn]}\)

容易做到 \(O(n)\)

代码

T2 P110125 独立集

题意

定义 \(k\;-\) 独立集为图的一个子集满足任意顶点至多 \(k\) 个邻居同样在子集中,给定一棵树,对于所有 \(0\le k<n\),求出 \(k\;-\) 独立集数量,\(n\le500\)

分析

\(f_{u,k,0/1/2}\) 表示子树 \(u\) 中求 \(k\;-\) 独立集,\(u\) 没选 / \(u\) 选了但邻居数量 \(<k\) / \(u\) 选了但邻居数量 \(=k\) 的方案数

转移 \(u\) 时,记录 \(t_k\) 表示不选 \(u\) 情况下 \(k\) 的答案,\(T_{s,k}\) 表示选择 \(u\) 及其 \(s\) 个儿子的情况下 \(k\) 的答案,每加入一个儿子则在 \(T\) 上背包,最终由 \(t,T\) 得到答案

容易做到 \(O(n^3)\)

代码

T3 P110126 删点

题意

给定平面上 \(n\) 个点 \((i,a_i)\mid 0\le i<n\),每次操作可以选择一对 \(i,j\),以 \((i,a_i)\)\((j,a_j)\) 为顶点组成一个矩形,删去严格位于矩形内的点,求出到不能操作为止,最终可能剩下的数量有哪些,\(n\le10^3\)

分析

特判 \(a\) 全相等的情况,此时显然答案为 \(n\)

显然所有最大值和所有最小值都必然剩下,且的一个最大值/最小值到最后一个最大值/最小值中间的部分只会剩下/最小值,该区间以前只会剩下若干个 \(a_1\),以后只会剩下若干 \(a_n\)

问题转化为求出前缀中可能保留多少个 \(a_1\),后缀中可能保留多少个 \(a_n\),以前缀为例

假设要计算的前缀为 \([1,lp)\)

若选择了一对 \(1<l<r<lp\) 满足 \(a_l<a_1<a_r\)\(a_l>a_1>a_r\),则删除 \([l,r]\) 中等于 \(a_1\) 的位置

可证对于任意一种最终状态,存在一种选择方式使得选择的 \([l,r]\) 之间无交

因此令 \(f_{i,j}\) 表示 \(1\sim i\) 中能否保留 \(j\)\(a_1\)\(f_{i,j}\gets f_{i-1,j-[a_i=a_1]}\),枚举 \(k<i\),若 \([k,i]\) 合法则 \(f_{i,j}\gets f_{k,j}\)

bitset 优化容易做到 \(O(\frac{n^3}\omega)\)

代码

T4 P110127 连接

题意

给定 \(n\times m\) 的网格,令 \(P_a^b\) 表示取 \(a\sim b\) 行得到的矩形中 \(1\) 的四连通块数量,求出 \(\sum_{1\le a\le b\le n}P_a^b\)\(n\le10^5,m\le50\)

分析

考虑分治,设目前处理 \([l,r]\),分治中心为 \(M\),需要处理所有 \(l\le a\le M\le b\le r\)\(P_a^b\)

\(M\) 合并至 \(l\) 的过程中,第 \(M\) 行中 \(m\) 个点只会发生合并,因此一共只会出现 \(O(m)\) 种连通情况,右侧同理,两两配对共 \(O(m^2)\) 种,分别处理一下即可

容易证明时间复杂度为 \(O(mn\log n+nm^2)\)

具体实现时,可以在扫描 \(M\to l\) 时维护 \(l\sim M\) 行中所有点的连通性,每加入一行则尝试纵向和与前一行合并,若产生了第 \(M\) 行的合并则新建等价类,右侧同理

需要注意常数

代码

比赛结果

\(100+100+28=36\)\(\text{rk}40\)

posted @ 2025-09-01 11:37  Hstry  阅读(16)  评论(0)    收藏  举报