构造做题笔记
UOJ460 新年的拯救计划
点完全图。选出尽量多生成树。输出方案。 。
考虑上界,总共有 条边,也就是最多可以分成 棵树。
尝试证明这个上界可以达到。我们考虑归纳法,假设 可行。
考虑 ,我们可以将每棵生成树选一个不同的点连向 ,考虑到只有 棵,显然是够的。
考虑 ,由 连向 , 连向 ,然后再加一棵生成树,由 连向 和 连向 ,同时连 和 。
这是一个构造的方法。这题就完了。
CF1558C Bottom-Tier Reversals
首先观察性质:位置的奇偶性不会改变,所以如果一开始奇偶性就错了肯定不行。
接着我们需要确定一个大体思路,如何做排序?由于是对前缀操作,我们考虑倒着往前一步步还原。
所以我们现在先考虑如何把最后两个变成 ,观察最终的长度约束,如果我们能在 5 步内完成,那么这个问题就解决了。
第一步:找到 ,使其变成第一个。
第二步:找到 ,使 变成 前面的元素。
第三步:翻转使得 第二个, 第三个。
第四步:翻转使得 第一个, 第二个。
第五步:翻转使得 最后, 倒数第二。
然后就顺利解决了这道题。
P6892 [ICPC2014 WF] Baggage
神仙构造。
首先看到这种题肯定是要手玩小数据并且猜下界,根据样例不难猜出下界是 。
证明下界分两步,首先是证明不存在更小的,其次是构造一个。
我们先考虑证明不存在更小的,观察题目的性质发现,如果我们记相邻两个位置相同的个数为 ,则我们从 ,由于每次最多新增两个且第一次最多新增一个,所以至少 次。
根据这个,我们可以手玩出 的情况:
进一步,我们尝试去归纳 更大的情况,我们发现可以这样做:
刚好 次,但是这里要求存在使得只往前移两位的方法,所以 ,意味着我们需要自己手玩 的情况。
毛虫树
一棵毛虫树(有一条链,所有点到这条链的距离不超过 ),编号 ,使得每条边 的权值为 ,边权 两端点标号的差的绝对值。
考虑递归,我们每次取最右边的点变成 ,然后将其周围的点赋 ,然后下一个点变成 ,周围的点赋值成 ,这样就可以递归地解决这个问题了。
[AGC041C] Domino Quality
很神啊。
由于是每行每列都有要求,这种时候我们可以尝试对角线!!!
如果我们能解决 大小的问题,并且 都有一样的解,我们沿着对角线分即可。
这里试一下发现 时是可以的,于是就做完了!
P9820 [ICPC2020 Shanghai R] Mine Sweeper II
不理解这题普及-是谁给的。鸽笼原理。
首先遇到这种 的分数的时候可以考虑:有 种可能的方案,且操作次数总和为 。
于是我们考虑构造两种方案使得涉及格子的总数为 ,这就不难想到将 的所有格子取反作为一种方案,我们可以证明数字和与 是相同的,通过任意两个格子之间的关系得出。
然后就没了,但这题绝对不止普及-。
CF1450C2 Errich-Tac-Toe (Hard Version)
和上题类似,我们需要找到三个方案。
考虑如何使平局,启示我们可以运用模 3 的余数分类。
所以我们可以让每次选定两个个余数,使第一个余数没有 O,第二个没有 X 即可。
2/3区间覆盖
区间 上给定了一些区间,这些区间的并覆盖了 。
选出若干个区间,使得 区间上恰被 个区间覆盖的地方 的长度 。
我们考虑去掉能去掉的所有区间,使得最后的并保持不变,这样按照左端点排序等于右端点排序,且没有一个部分覆盖超过两次。
然后我们取所有区间,奇数区间,偶数区间,不难发现至少覆盖的是 ,根据鸽笼,我们解决了这道题。
Fixing Networks Gym - 103119F
这种题目我们首先需要想一些必要条件,然后尝试证明其也是充分的。
我们发现一个必要条件:,其实这也是充分的。
我们考虑归纳,如果 ,我们只用将 个点连成完全图即可。
如果 ,我们可以连成一个环,然后在环上再连边即可。
CF1163E Magical Permutation
好题。被我切了。
我们考虑性质,我们发现由于原数组互不相同,也就是差分数组的前缀和互不相同,这意味这我们需要用给定集合的一个子集表示所有的数。所以我们大胆猜结论:如果线性基中前 位都不为空 就是可行的,并且所用到的数不能大于等于 。
必要性显然,现在我们尝试构造一组解,我们考虑递归的思路,我们先把左边构造一种 的,然后翻转变成右边,但是右边的所有数需要异或上 的线性基的那个数,这样保证中间的差刚好再 中。
然后就完了,代码很短。
CF1438D Powerful Ksenia
这题诈骗啊。
显然操作不会改变异或和,然后分奇偶性讨论。奇数直接把第一个数每两个数每两个数异或上所有的,然后再重复一遍即可,偶数不为 显然不行,否则忽略最后一个,按照奇数的来就行了。
好唐啊。
AT_jsc2019_qual_d Classified
先手玩样例盲猜答案是最高的二进制位。
然后我们考虑到题目要求等价于都是二分图,容易想到把点分成一半互相连边,然后内部递归即可,折原可以构造出解。
可以直接暴力算,不过题解给的构造更巧妙,直接连最低为数码不同的位置即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通