构造、交互题技巧学习小记

(本文仅包含技巧和例题,无题目解析)

抽屉原理

抽屉原理通常的表述时,将 \(n\) 个物品放入 \(k\) 个抽屉,则其中必有一个抽屉包含至少 \(\lceil\frac nk\rceil\) 个物品也一定有一个抽屉包含至多 \(\lfloor\frac nk\rfloor\) 个物品。

在一些构造题中,经常会要求构造一个权值至多(少)为某个数的方案。这时候可以考虑找出若干个可行的方案使他们的权值之和为定值。假设找出了 \(k\) 个可行的方案,总权值和为 \(n\),根据抽屉原理,其中最小权值一定不超过 \(\lfloor\frac nk\rfloor\),最大权值一定不少于 \(\lceil\frac nk\rceil\)

很多时候其实是找到一些方案使每个单位(比如点/格子/物品等)的贡献次数相同,比如每个点只被一个方案包含。

方案数可以观察题面要求的分母,比如要求操作数不超过 \(\lceil\frac n3\rceil\) 次,那么可能就需要找出 \(3\) 种或 \(6\) 种方案。

例题

CF1534D Lost Tree

Errich-Tac-Toe (Hard Version)

gym102900B Mine Sweeper II

递归、归纳法

在一些构造题中,对于不同的输入,问题的结构有很大的相似性。在很多时候,这往往意味着我们的构造也具有很大的相似性,或是具有周期性。这时往往可以通过递归的方式,对子问题进行构造,并在子问题的构造的基础上进行一些小的调整,来得到原问题的构造。

本质都是通过证明 / 构造更小范围内有解,边界有解,并且可以通过操作将问题转化为更小范围进行构造。

需要注意的时转化为更小的数据范围时不能丢掉题目性质。

可以考虑一种满足限制条件的一般情况,以某一种方式(按题目要求)加上一个单位(点、格子、物品等)是否依然满足限制条件。

例题

CF1470D Strange Housing

CF1515F Phoenix and Earthquake

ARC122E Increasing LCMs

P6775 制作菜品

DFS树

在解决一些图上的构造问题时,DFS 树往往有非常大的帮助。

一张图的 DFS 树是在对其进行深度优先遍历时,所形成的树结构。建立了 DFS 树后,图上的边可以分成四类:

  • 树边即每个点到其所有孩子结点的边,也即每个点第一次被访问时经过的边。
  • 前向边是每个点到其后代的边,不包括树边。
  • 后向边是每个点到其祖先的边。
  • 其余边称为横叉边。

其中,前向边、后向边、横叉边统称为非树边。

在构造题中,通常我们用到的是无向图的 DFS 树。如果我们将每条边按照第一次经过时的方向进行定向,则无向图的 DFS 树满足所有非树边都是后向边。这个性质在解题过程中有非常大的作用。

例题

CF1364D Ehab's Last Corollary

P5811 景点划分

比较常见的有 2-SAT,欧拉回路,环,二分图 等性质。

可以将一些数字上的东西转为图上的构造,再利用图的性质证明其合法性,同时通过证明推出一个合法的构造。

个人认为这部分的题需要一些数感。

例题

CF1270G Subset with Zero Sum

CF1404D Game of Pairs

AGC018F Two Trees

交互题

交互的主要目的是获取信息,要尽量最大化获得的信息,并进行区分,同时根据题目性质合理的选择询问。

有关求树的结构的题还有一个技巧,就是可以考虑先问出每个点的深度,当然有时候也可能是其他信息。

例题

UOJ405 组合动作

UOJ165 Flea

P7597 猜树 加强版

本文部分参考:

《构造题和交互题的一些常用解题方法》—— gyh

《信息学竞赛中构造题的常用解题方法》—— 蒋凌宇

posted @ 2023-07-23 11:11  牛肉爱吃dks  阅读(46)  评论(0编辑  收藏  举报