9月做题记录
9月做题记录
✩ trick
✯ 会大部分,要提示
✬ 会小部分/完全没想到,看了才会
◈ 脑电波
✡ 有某一算法的神秘通用性质
⊗ 待补
- 9月做题记录
- ARC146C
- ARC146D
- CF1994G ✯
- P3599 Koishi Loves Construction ✬
- AGC030C
- AGC035C ✯
- AT_hitachi2020_e Odd Sum Rectangles ✬
- CF1267H Help BerLine ✬
- CF1270E ✯✩
- ARC148D mod M Game ✬
- P4484 [BJWC2018] 最长上升子序列
- P6970 [NEERC2016] Game on Graph
- AGC002E Candy Piles ✯✩
- CF1411F/CF1464D The Thorny Path ✩
- ARC180E LIS and Inversion ✯✩
- [ARC159C] Permutation Addition ✯
- [ARC159E] Difference Sum Query
- [ARC159F] Good Division ✯
- [AGC007E] Shik and Travel
- P10880 [JRKSJ R9] 莫队的 1.5 近似构造
- P10882 [JRKSJ R9] ZYPRESSEN ✬✩
- CF2019C Cards Partition
- CF2019D Speedbreaker
- CF2019E Tree Pruning
- CF2018D/CF2019F Max Plus Min Plus Size ✯
- CF2018E1/E2 Complex Segments ✯✩
ARC146C
显然只要所有大小为奇数的子集的异或和都互不相同即可
那么
然后注意这样求出的
这种求2-sat字典序最小解的做法按理来说是
ARC146D
- 做法1
限制转换为
这样就可以
- 做法2 ✯
是官方
的做法
把限制转换为
然后先把所有值都赋为
复杂度
CF1994G ✯
Hint真的蚌埠住:
- Think of the most stupid solution you can do
- Do memorization and some cuts
- Done!
考虑
发现这样小的位会影响到大的位,但大的位不会影响小的位,所以 the most stupid solution
就是从到大递归,设状态
然后发现,因为
P3599 Koishi Loves Construction ✬
感觉除了打表找规律找出正解来,很难单独凭人类智慧直接推测出来啊
的情况
此时即要求不存在区间
如果
所以
打表找规律可得:
此时对于
的情况
此时要求不存在区间
所以
通过打表找规律又可得:
AGC030C
若
否则当
考虑变成斜着的形式
123456
234561
345612
456123
561234
612345
发现这样构造后,相同的数之间就互不影响了,那么这时加入一个新的数
eg:
123456
274561
345612
456127
561234
612745
这样最多能塞
AGC035C ✯
首先,如果
然后发现有个很好的性质,如果
如果
如果
复杂度
AT_hitachi2020_e Odd Sum Rectangles ✬
非常牛的题
要求尽量多的矩阵内的数之和为奇数,因为只在意奇偶性,那么换成异或和
不失一般性的假设
先求出
考虑先确定
考虑构造这个上界对应的
因为已经
如果已经知道
证明:
- 对于
和 ,因为已经是合法构造了,且后面的操作没有再改变它们,所以第 行和第 行是合法的 - 对于
和 ,因为 和 是合法的,且它们分别取自 和 ,虽然有变换,但是 和 变换的列是相同的,所以合法 - 对于
和 , 和 是合法的,而 是在 的基础上改变了有 的列 考虑研究任意两行
和 的差别,考虑从第一个 的 开始回溯操作,如果当前回溯中, 和 都在被新加入的那一侧,那么它们的差别等价于 和 的差别,那么现在考虑在 的 ,此时不失一般性的假设 是已经有的一侧, 在新加入的一侧,那么 和 的变化就是 和 的差别,再算上那些含 的列,那么总结下来,任意两行 和 的差别可以用一个集合 表示( g中存的二进制的位),如果当前列 有 中的奇数个元素,那么 和 这一位不同 因为可以知道,二进制中所有位是独立的,所以
和 当前列不同的概率就是 ,那么也就是刚好一半的列不同,复合我们的限制 再回到原问题,现在知道了
和 的差别集合 ,那么在 的基础上变化了含有 的列后,因为二进制中所有位独立,所以会有 原本 和 不同的列改变,此时变成了相同的,有 原本 和 相同的列被改变,此时变成了不同的,那么总共 和 依旧还是有一半的列不同,此时 和 的差别集合就是
复杂度
CF1267H Help BerLine ✬
首先,可以通过惊人的注意力注意到
总之这个
先考虑只染一种颜色,那么一定有任意时刻这种颜色的点都不能相邻,发现如果把染了这种颜色的点去掉后,把其他点单独提出来,变成一个新的序列,如果这个序列也是合法的,那么加上原本那些染了色的点进去依旧合法
那么考虑怎么染色,肯定想尽量多的染色,有一个比较朴素的想法,让操作从后往前,每次考虑当前操作的点有没有被标记,如果没有,给它染色并标记当前与它相邻的点
发现这样至少可以染
那么就这样一直递归子问题即可
复杂度
CF1270E ✯✩
在网格图上无敌的黑白染色...!
真没想到这也能染,太牛了
- 第一种是纯粹的黑白染色
首先根据一个点
否则如果只存在
如果是奇数,可平移一位
那么一直转,直到出现不同色的点为止,然后可以发现,因为每次任意两点间距离会变成原来的
- 另一种做法,就是直接分别考虑
和 的奇偶性,然后分成四类,然后大力分讨即可,感觉没上种方便(
ARC148D mod M Game ✬
考虑最后只剩两个点
考虑
如果有点没匹配上,那么显然
P4484 [BJWC2018] 最长上升子序列
首先肯定不能是逐个在序列的末尾添加数的这种求法,显然状态数爆表
考虑从小到大的添加数字,如果把当前数放到
复杂度
P6970 [NEERC2016] Game on Graph
称希望平局的是
给每个点两个状态,一个是
然后先考虑判能否平局,有两种方式
- 判平局
先缩点,变成
除此之外,还有一些比较复杂的情况,比如偶环之类的,总之要大力分讨一下
然后就可以这样一直类似染色的方式染上去即可,然后对于不是平局的点,就普通的博弈做法即可
- 判不平局
这种做法要好写一些
对于一个出度为
这个也是类似染色的就染上去就行了,判断具体是谁胜依旧普通的博弈做法
复杂度
AGC002E Candy Piles ✯✩
每次要么全部
考虑网格图,将
发现斜线上的点的状态相同,那么求出原点斜出去接近边界的那个点的状态即可
复杂度
CF1411F/CF1464D The Thorny Path ✩
可恶喵!导数还在追我!
显然答案为
通过打表可以发现,最优的情况是尽量使得分到的每一个
, ,要么有两个 ,其余为 ,要么有一个 ,其余为 ,只有一个 为 ,其余为
具体证明:
显然
都是不得已的折中策略,那么只需证明 是最优策略即可 由高维不等式
可知,当 尽量平均时能取最值,设这个平均的值为 ,即 ,设 那么有求
的最大值,考虑它的单调性,因为 是常数,无影响,去掉,现在来考虑 的单调性 显然
时取得最大值,但又要求 是整数,所以考虑 和 的大小,发现 ,所以 取 时最优
那么显然一个环
对于
对于
对于
ARC180E LIS and Inversion ✯✩
这种题一般都是先从代价/价值最小/最大一点点转移到其他情况
首先考虑要求代价为
那么有转移:
设
显然有
那么现在找出差分数组
稍微模拟一下即可发现,
那么每增加一个代价,就是可以少一个这样的删去
发现只关心最终序列中的
发现这样做,
复杂度
[ARC159C] Permutation Addition ✯
显然最后的序列中,每个
分类一下,当
当
首先有一个很好用的策略,就是每次加上
猜测应该会存在策略使得满足上述条件即可构造出合法的方案,显然应该会需要根据当前的
操作次数:
[ARC159E] Difference Sum Query
比较抽象的题目,题面翻译的有点让人误会啊,原题面在
和让 间写的是句号,翻译的写的逗号,一开始一直以为是只有 才能让
首先把题面关于
因为题目说了,
考虑
考虑感觉这个过程建树,每个数的节点就是当前的
考虑怎么求答案,先建出
那么只需要计算出总的边数,以及
那么根、
因为一共有
复杂度
[ARC159F] Good Division ✯
线性做法 ✡
首先,好的序列满足以下两个限制:
- 长度为偶数
- 没有绝对众数
考虑证明,若存在某一个数
设
显然有值的
考虑优化转移,记录
考虑怎么把
- 以
为右端点不合法且以 为右端点合法
假设这个区间是
- 以
为右端点合法以 为右端点不合法
假设这个区间是
发现上面两个都满足,要么是
发现对于同一个
如果这样的边的数量允许的话,似乎我们只需要找到每个
考虑边的数量
结论是,对于每种
考虑这样一种方法,把序列中所有为
正反都做一次,可以得到所有可作为这种区间的左/右界的端点以及每个
复杂度的话,精细点可以
分治的双 做法 ✩
依旧还是绝对众数的限制:
首先,好的序列满足以下两个限制:
- 长度为偶数
- 没有绝对众数
考虑证明,若存在某一个数
的出现次数 恰好是序列的一半,那么显然可以一直删 和一个不是 的数来把序列删空,对于不存在这样的 的序列,只需要进行一些调整使得出现 即可
那么现在考虑
对于当前区间,
而对于一个跨
复杂度
[AGC007E] Shik and Travel
感觉确实简单啊,咋是黑的呢
显然要二分
题目要求每条边都要经过两次,即进入一棵子树后,必须把子树内的点遍历完了再出来,其实就是一个类
很自然的想到
发现我们只需要对每个
这样,总的状态就是
总复杂度就是
P10880 [JRKSJ R9] 莫队的 1.5 近似构造
首先,因为要求的是乘积最大,所以问题转换为划分值域区间,使得每个区间的价值的乘积最大
进一步的,设当前区间的答案是
那么考虑对每个点
考虑怎么求出这个东西,考虑从题目给定的区间入手,那么即是将当前区间中的所有数排序后就能知道,对于当前区间,区间中每个数的
总复杂度
P10882 [JRKSJ R9] ZYPRESSEN ✬✩
学会了,支配点!以前没听到过这个说法?感觉还挺有趣的,打算找几道题做
首先对值域进行分块,分成
现在来考虑一个性质,加入我们已经确定了三元组的
现在我们可以知道,这个
- 如果
也被包含在 之前的块中
这样的
- 如果
不被包含在 之前的块中
此时
注意到,一个数能被选做
那么显然,这样的所有
再来考虑限制
当
此时维护前/后缀的最小值序列,这里维护后缀的,那么就是从
那么当把
,这部分的支配点数量显然是线性的,再来考虑那么不会被弹出的
再来考虑
也就是说,对于
总复杂度
CF2019C Cards Partition
设
根据鸽巢原理,可知道只要
显然最优情况下有:
那么问题就变成找到最大的
先只考虑后面这个限制,此时可二分或直接算出满足条件的最大的
复杂度
CF2019D Speedbreaker
若已确定从城市
再找到第二小的,
然后就这样一直判下去
发现只要当前总区间(即
考虑先找出每个前缀的总区间,枚举当前城市
复杂度
CF2019E Tree Pruning
枚举最终叶子到根的距离
复杂度
CF2018D/CF2019F Max Plus Min Plus Size ✯
唐了/ll
首先能知道必选最大值,证明考虑设最大值为
现在考虑来维护最小值
显然
并查集乱搞就行,复杂度是
CF2018E1/E2 Complex Segments ✯✩
好牛啊
先简化一下题意,就是要求每个子集都是一个团,且团与团之间没有边,且显然一个团中必存在一个点,使得所有边都包含了它,那么其实就相当于把序列划分成了很多段,然后每个团的边在被完全包含与当前段中的边中选
首先看到
因为题目要求
, ,
那么上面那种情况取
考虑已知
然后又可以发现,当
那么可以
若固定
那么这部分复杂度是
考虑优化,这里把查找
突然想起我之前算复杂度都把
当 算,蚌埠住了
首先把区间变成不交的,显然可以有在新的区间有交当且仅当在原先的区间有交
将原本维护的覆盖次数序列
考虑变化,对于当前维护的区间
这样复杂度就是
总复杂度变成
感觉很卡常,卡了几下还没卡过去,摆烂了喵
有
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)