有趣的构造题

前言:这篇题单里放了一些个人认为很有用/新奇的构造题,这些是我第一次见比较难想出来题,建议想不出来先看下思路。

不保证难度

CF1198C

题意

给一个无向简单图,\(3\times n\) 个点, \(m\)条边,请找大小为 \(n\) 的点独立集或边独立集。输出点独立集、边独立集均可,或输出无解。输出方案的同时需输出具体选择了哪 \(n\) 个点/边,任意方案均可。

\(\sum n \leq 10^5,\sum m \leq 5\times 10^5\)

题解

先说解法:贪心地选取边独立集,如果选取的边集边数不小于 \(n\) 条,则输出边独立集。否则选择非边集中边上的点。

证明:

选边独立集的不用多说,贪心的选取,感性理解一下就是贪心地选完之后一定不会出现两条未被覆盖的点相邻的情况,选到的边的数量是否最多并不重要,因为下文还有关于选取点独立集。

当选取到的边的数量不足 \(n\) 条时,则选取点独立集。因为选完边独立集后一定不会出现两条未被覆盖的点相邻的情况,除去边上的点好还剩 \(3\times n-2\times w\)\(w\) 是边的数量)。当 \(w<n\)\(3\times n-2\times w\) 一定大于 \(n\)。所以从剩下的点里任意选取 \(n\) 即可满足条件,并且一定不会出现无解的情况。

P9219

题意

这是一道 IO 交互题。

有一个长为 \(n\) 的正整数序列,其中有一个特殊数是其他任意数的两倍及一上。你每次可以询问两个数的差,你需要在 \(\lfloor \frac n 2\rfloor +2\) 次询问中找出这个特殊数。

题解

一个重要结论:特殊数与任意数的差一定比除了特殊数外任意两个数的差要大。

可以自行推导以上结论,一个原因是序列中最小为 \(1\)

只需先将序列中 \(\lfloor \frac n 2\rfloor\) 对数询问一遍,确定出特殊数可能在的一对数。若 \(n\) 为偶数,则将这对数与这对数与另外的一个数分别询问差,若 \(n\) 是奇数则与先前没有问到的数询问差。在这三对差的关系中较小的差所对应的两个数即不是答案,剩下的那一个即是答案。

posted @ 2023-05-02 12:02  Lyz09  阅读(28)  评论(0编辑  收藏  举报