构造题做题记录
1|0构造
感觉上很大一部分的构造题的构造过程可以画图,应该是一个不错的思考方向。
1|1P8098 [USACO22JAN] Tests for Haybales G
题意:有一个长为
思路:考虑把这些关系放在树上,即
trick:遇到每个点有唯一前驱的条件,把树建出来问题可能会更好处理。
1|2[AGC018F] Two Trees
题意:给定两棵都是
思路:先声明取值只有
首先考虑每个最终权值的奇偶性,如果在两棵树上不同就无解。
接着考虑怎么构造。
我们把一对权值为
trick:遇到确定权值的题,可以考虑通过缩小可选值域范围作为切入点。
1|3[AGC027F] Grafting
题意:给定两棵
思路:首先,发现是无根树,于是考虑转成有根树。我们发现,如果进行完第一次操作,那么可以把第一次操作的点当成根,原因是这个点之后不会再做修改。
接着考虑构造。我们发现,根据只操作叶子的限制,在A树上,一个点必须比父节点先被操作,而在B树上必须后被操作,于是可以用拓扑排序求出一组合法解。
枚举第一次操作是
trick:从边界情况入手。
1|4[ARC095F] Permutation Tree
题意:给定一棵树
思路:先考虑怎么生成排列。按权值从小到大枚举,把当前位置和最大值连边,并且更新最大值。
我们发现在连边过程中,会形成一阶毛毛虫,即一条链上挂一堆点,而且链上的点权值更大,下标更小。于是我们求出最长链及链上每个点的度数,假设当前已经有
1|5Largest Smallest Cyclic Shift
题意:定义 babca
的情况,babca
、abcab
、bcaba
、cabab
、ababc
中最小的那个,即 ababc
。
你需要构造一个字符串 a
、b
和 c
,使得
思路:设
1|6CF232C Doe Graphs
题意:
思路:核心就是求出从某个点到1和
如果
如果
否则就有3种情况,
1|7CF521E Cycling City
题意:给定无向图,问是否能找到两点满足这两点之间至少有 3 条完全不相交的简单路径。
思路:原条件等价与 dfs 树有一条边都被两条非树边。求出 dfs 树后,对于剩下的非树边,可以暴力覆盖,因为如果一条边被覆盖两次那么就找出了答案。细节略多。
trick:在无向图上的构造可以找出 dfs 树进行处理。
1|8CF566E Restoring Map
题意:给你一棵树每个点距离不超过 2 的点集,求出一颗满足条件的树。
思路:首先,如果两个点的邻居集合交集大小为2,那么交集中的点之间显然是有边的。这样所有非叶节点之间的连边都会被处理到,于是只用考虑每个非叶节点挂在哪里。
求出每个非叶节点的邻域,如果一个叶子节点的邻居集合和其相等,那么就挂在这个点上。
还有一个小点,就是对于每个叶子节点,包含了这个点的最小的集合就是这个点对应的集合。
1|9CF650E Clockwork Bomb
题意:给出两棵
思路:感觉这道题的思路比类似题更自然。
首先,如果一条边在两棵树上都出现过,那么显然这条边不会被处理,因此我们找到了操作次数的下界为
将这些边连接的点合并后,就可以每次选在第一棵树里的叶子,然后连边,再不断递归下去。
实现方法很神仙,把第一棵树 dfs 一遍,对于一个节点
trick:分析答案的上下界对解题方法有一定的启发。
1|10CF715D Create a Maze
题意:有一个网格,你可以确定每条格线是否可以通信,要求最终从
思路:和HBCPC的题几乎一样,做法有点小区别。
构造题遇到大的数可以考虑按进制构造,而且不一定非要是二进制
1|11CF871E Restore the Tree
题意:有一棵树,你知道这棵树的
思路:首先,显然是先求出所有关键点的虚树。可以任选一个点作为根,然后求出每个点的深度,这样就可以求出每个关键点及到根路径上的点的父节点。
再考虑不在虚树上的节点。我们找到离它距离最近的已经确定了的点,这样就可以再根据这个点的深度就可以知道树形态了。
1|12CF883B Berland Army
题意:
1.对于所有由
2.对于
思路:首先肯定是求出每个点可选权值范围
1|13CF1097E Egor and an RPG game
题意:设
思路:首先是结论:
设当前LIS长度为
一是
二是
对于找最小链覆盖的方法,可以发现在用二分求LIS的过程中就自然找出了LDS划分,这样就行了。
1|14CF1225F Tree Factory
题意:给出一棵树,每次操作可以将一个节点从它的父亲节点重新连到它的兄弟节点上,求将这棵树退化成链的最少步数,输出操作后遍历链的编号,最少操作次数,及每次操作的节点编号。
思路:因为感觉和深度相关,而且显然答案的下界是
trick:同样是可以分析答案的上下界。
1|15CF1227G Not Same
题意:给定大小为
思路:如果往矩阵方面想应该很容易想出来。(才看见输出的就是矩阵)
考虑把数列拆成
我们把全
这启示我们可以第
1|16CF1375H Set Merging
题意:给定长度为
- 接下来给定
个询问,每次询问给出 ,你需要通过若干次操作制作出集合 。注意:操作过程中集合总数不能超过 。 - 操作是指:你可以合并两个集合
,但要满足 。注意:合并后集合 依然存在。
思路:有两种主流做法,一种是值域分块,一种是线段树。没有看懂值域分块的做法,只会线段树的做法。
首先考虑最朴素的暴力,就是把所有的数排序后依次合并,接着可以考虑把这一步放在值域线段树上维护,每次往底层分治下去再合并。
然后考虑优化,即如果一个区间之前已经被合并出来过那么就可以不用额外处理,这样可以证明复杂度是对的,因为层数大于
trick:遇到合并可以往分治方面去想。
1|17CF1474E What Is It?
题意:给定一个
思路:想到了大概,就是拆成构造一个长为
接下来的构造就是
证明可以考虑,
trick:同样是可以分析答案的上下界。
1|18CF1500C Matrix Sorting
题意:给你两个
思路:离谱题。没人知道这个做法为什么是对的,但是它就是对的。
首先每一列至多被操作一次。先在B中随机找一个不降的序列作为最终序列,然后再找满足对于每个相同数的连续段的相对次序都合法的列进行操作,用bitset优化即可。
1|19CF1592F1/2 Alice and Recoloring
思路:自己和同学推出来了只用1、4操作,然后发现两次4操作不如6次1操作,于是以为只需要用1操作。
实际上可能会用一次。
有一个没想到的简单trick:令
对于F2,每一行、列只会用一次,这样直接求一个匹配就可以了。
trick:遇到对整体的操作,要想办法变成对单点的操作,通常可以用差分来转化。
1|20CF1599A Weights
题意:给你一个长度为
思路:想到了可以从小到大排序后LRLR放,不过对于更一般的情况没有太好的想法。
有一个结论,如果最后是R,那么第1,3,5,7...大的肯定放在右边。于是只需考虑顺序。
可以从后往前倒推,如果连续的两个相等就填最小的否则就填最大的,用双端队列即可。
trick:从边界情况入手。
1|21CF1599J Bob's Beautiful Array
题意:你有一个长度为
思路:神仙题。
我们倒着考虑。如果我们构造出了答案序列
首先,如果有偶数,那么如果有至少两个奇数或者没有奇数,那么可以直接构造一个大小为3的奇环。
否则就需要构造一个偶环。考虑把这个偶环上的边黑白染色,那么就要求黑边的权值和等于白边的权值和,即
trick:一个元素与若干其他元素相关可以考虑建图处理。
1|22P7115 [NOIP2020] 移球游戏
题意:给定
思路:终于来写移球游戏了。
自己想到了一个神秘方法,每次选择一个代价最小的颜色归位,不知道能不能过。
有一个分治的做法。首先,假设当前只有两列,设第一根柱子上颜色为 1 的有
-
把第二根柱子的前
个放到第三根上。 -
把第一根的所有 1 放到第二根上,颜色为 0 的放到第三根上。
-
把第二根上的 1 放到第一根上,再把第三根的 0 放到第一根上,把第二根剩余的放到第三根上,再把第一根的 0 放到第二根上。
-
最后把第三根上的 01 放到第一、二根上就行了。
trick:对于类似排序的问题,可以考虑转成 01,也不能忘了归并排序。
1|23[AGC030C] Coloring Torus
题意:给定一个数字
。 且为整数。 。- 设
表示 四个数中等于 的数的个数。那么对于矩阵中任意两个数 和 ,若 ,则需要满足 。
求出任意一个合法的方案即可。
思路:巧妙的构造题。
想到了沿对角线放。
正解就是沿着对角线放,大概长这样:
这样还是需要
1|24[ARC089E] GraphXY
题意:给出一个
1、有向图点数
2、图中没有自环和重边;
3、图中边有边权,边权为 X
或Y
;
4、对于所有
思路:小清新构造题。
设
考虑怎么构造。其实比较自然,因为钦定了经过多少条
trick:如果构造遇到未知数,可以通过 DP 等方式求出未知数的线性组合的贡献。
1|25CF1329D Dreamoon Likes Strings
题意:我们称一个字符串
思路:神仙转化题。
一开始想到了一堆复杂度很高的DP,都过不去。
正解先是一步转化。把所有相邻且相等的位置拿出来组成一个新串,相当于是把可以随意被消掉的部分去掉了。此时对于原串的操作相当于是把新串的一个字符去掉或者消掉相邻的两个不相同字符,这样剩下只需对原串再进行一次操作即可。
转化完后就比较容易了。可以理解成一个类似匹配的问题。设所有字符中出现次数最大的为
具体实现可以用栈。有点小细节。
trick:简化无用的状态。
1|26CF1481F AB Tree
题意:给定一棵 a
或 b
。
要求整棵树中字符 a
的数量为 b
的数量为
定义节点
-
若
是根节点,则 的上的字符串为根节点分配到的字符。 -
否则,
上的字符串为父节点上的字符串的末尾加上 分配到的字符。
请为每个节点分配字符,在满足字符 a
,b
数量要求的前提下,使得所有节点上的字符串的种类最少。
思路:又是背包题。
自己想的是尽量让靠近根的颜色一样,结果是尽量让每一层的颜色一样,确实是更优。
首先,假设有一种选取方法使得一些层数对应节点数之和为
具体地,对于每一层,我们先考虑非叶节点,设节点数为
trick:分析答案的上下界。
1|27CF1667C Half Queen Cover
题意:给定一个
注:一个点
思路:一开始把题目看错了,推了半天推不出来。
其实思路比较简单,就设答案为
然后考虑像马走日字一样放
trick:分析答案的上下界,考虑用一些实际方法(经验)来构造。
1|28P6726 [COCI2015-2016#5] POPLAVA
题意:使得柱状图的容量为
思路:考虑最大容量,那么就是把
接下来考虑怎么构造。在
trick:不妨先假设一定可以构造出来,再证明。
1|29P7007 [CERC2013] Rubik's Rectangle
题意:有一个
思路:套路和魔方很像的构造题。
首先,可以发现
对于
trick:找出等价类。
1|30CF1559D2 Mocha and Diana (Hard Version)
题意:给定图
思路:首先可以证明,最终一定有一个图只有一个连通块。
如果 A 中连通块数大于 1,那么对于任意两个连通块,在 B 中一定都联通,于是 B 中一定只有一个连通块,否则 A 就是一个连通块。
因此可以随意加所有可行边。
这样做是
我们把所有点都与一个点连边,然后把剩下的不与这个连通块连通的随意匹配即可。
1|31code_festival_2017_quala_d Four Coloring
题意:给一个
思路:考虑转成切比雪夫距离,那么相当于是一个点和一个正方形边框中的点颜色不同,于是可以分成
trick:曼哈顿距离和切比雪夫距离的相互转化。
1|32[AGC027D] Modulo Matrix
题意:构造一个
思路:我也不知道这么人类智慧的做法是怎么想出来的。首先,把这个矩阵黑白染色,钦定白格子的数是所有相邻的数的
1|33CF612E Square Root of Permutation
题意:给定一个
思路:考虑有一个环
如果
如果
因此如果环长是奇数,可以直接还原出来,否则就需要两个大小相同的环拼起来。
trick:把构造的过程反过来考虑。
1|34CF512E Fox And Polygon
题意:n边形的一种“分法”是n - 3条不相交的对角线构成的集合。
每一步可以选择一条对角线(但不能是n边形的边)然后翻转这条对角线。
对于一条对角线AB,假设它的两边分别是三角形ABC和三角形ABD。“翻转”对角线AB,就是删除对角线AB,并添加对角线CD。
给定初始状态和终止状态,操作次数限制 20n 次。
思路:这种题有很经典的套路:找到一个中间状态,让初始状态和终止状态都变成中间状态。
在这一题中,中间状态可以就是所有对角线都与 1 相连。
考虑怎么构造。
如果 1 连了
trick:给定初始态和终止态,可以找到一个容易到达的中间态,让两个状态都变成中间态。
1|35CF468C Hack it!
题意:找到一对
思路:很巧妙的思维题。
我们发现,
现在的问题是计算
trick:考虑边界情况。
1|36P3599 Koishi Loves Construction
题意:构造
思路:对于第一问,如果
对于第二问,首先可以发现 1 一定在第一个,
打表可以发现只有 1,4 和质数是有解的,而且可以构造出前缀积是
1|37P6831 [IOI2020]嘉年华奖券
题意:有
思路:首先考虑,假如我们知道了我们总共用了哪些奖券,那么其中有
于是先要确定选哪些奖券。这一步可以直接贪心,先默认取负贡献,然后再贪心地把
接着就是如何构造方案。设一种颜色取正贡献的有
__EOF__

本文链接:https://www.cnblogs.com/Xttttr/p/18015993.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】