2025.3.28 NOI 模拟赛 题解

比赛

T1 NFLS #18034. 基础计算几何练习题

题意

给定 \(n\),求有多少直线穿过点集 \(\{(x,y)\mid 1\le x\le y\le n,x\in\mathbb N^+,y\in\mathbb N^+\}\) 中至少两个点,\(n\le2\times10^9\),多测 \(T\le20\)

分析

OEIS A244504,其通项公式容易拆为求若干个 \(\sum_{i=1}^m \varphi(i)\)\(\sum_{i=1}^m \varphi(i)i\)\(\sum_{i=1}^m \varphi(i)i^2\),杜教筛即可

具体推导类似点减边容斥,枚举两端都在点集中的线段,则合法直线数量为除端点为不经过整点的线段数量减去只经过一个整点的线段数量,可以将等腰直角三角形压为等边三角形,只考虑其中一遍,最终乘以三

时间复杂度 \(O(\sum n^{\frac 23})\)

代码

T2 NFLS #18035. 基础最优化练习题

题意

给定一个 \(n\times m\)\(0/1\) 矩阵,若干个位置不确定,定义一个矩阵的权值为其中所有相邻的四个位置中,\(\begin{bmatrix}\ast&0\\0&1\end{bmatrix}\) 的数量减去 \(\begin{bmatrix}0&1\\1&1\end{bmatrix}\) 的数量,给出一种填数方式,使得权值最大,\(n,m\le300\)

分析

先考虑如何求一个给定矩阵的权值

对于一个 \(1\) 的凸四连通块,考虑其左上轮廓线,显然为一段折线,若左侧和上方都不贴着边界,则 \(\begin{bmatrix}\ast&0\\0&1\end{bmatrix}\) 型的数量恰好比 \(\begin{bmatrix}0&1\\1&1\end{bmatrix}\) 型的多一个,贡献为 \(+1\)

显然不在轮廓上的和轮廓线其余部分都没有贡献

对于凹但无空腔的四连通块可以得到相同结论

假设左侧边界和上方边界以外的部分都是 \(1\),右侧边界和下方边界以外的部分都是 \(0\),则不用考虑贴着边界的情况

然后考虑空腔的影响

若空腔不贴着边界(不与连通块外的 \(0\) 八连通),显然只有右下轮廓线有贡献,一个八连通的空腔的右下轮廓线上,\(\begin{bmatrix}0&1\\1&1\end{bmatrix}\) 型的恰好比 \(\begin{bmatrix}\ast&0\\0&1\end{bmatrix}\) 型的多一个,贡献为 \(-1\)

若空腔贴着连通块左上边界,则连通块左上边界少了一个 \(\begin{bmatrix}0&1\\1&1\end{bmatrix}\) 型的,该空腔的贡献为 \(0\)

另外三个方向类似

若空腔同时贴着多于一段边界(实际上此时 \(1\) 已经不构成四连通块了),则讨论可得总体贡献为 \(1\) 的四连通块数量

综上,整个矩阵的权值为 \(1\) 的四连通块数量减去 \(0\) 的八连通块数量(包括边界以外的部分)

然后考虑如何求权值的最值

对于一个 \(?\),若其同时与一个 \(1\) 四连通、与一个 \(0\) 八连通:若该位置填 \(0\)\(1\) 的四连通块数量不降,\(0\) 的八连通块数量不增,权值不降;若该位置填 \(1\)\(1\) 的四连通块数量不增,\(1\) 的八连通块数量不降,权值不增。因此这样的 \(?\)\(0\) 一定不劣

先通过一次 \(\text{bfs}\) 把满足上述要求的都填好(一个填好之后可能令周围的也符合要求,所以需要 \(\text{bfs}\)

然后通过 \(\text{bfs}\) 求出每个确定的 \(1\) 所属 \(1\) 的四连通块的编号

对于每个 \(?\) 的八连通块,若其中位置不全\(1\) 四连通,则其中与 \(1\) 四连通的一圈填 \(0\) 一定不劣

若其中位置\(1\) 四连通,令 \(c\) 为与之四连通的 \(1\) 的连通块数量,当 \(c\le 2\)\(?\) 的连通块全填 \(1\) 最优,否则全填 \(0\) 最优

然后考虑不与 \(1\) 四连通的部分

显然最优情况为选出其中一个子集填 \(1\),满足子集两两不相邻

即二分图的最大独立集

网络流求即可,时间复杂度 \(O(nm\sqrt{nm})\)

代码

参考

T3 NFLS #18036. 基础字符串练习题

比赛结果

\(100+5+0\)\(\text{rk}\) \(19\)

posted @ 2025-03-28 21:13  Hstry  阅读(42)  评论(0)    收藏  举报