感想 12/19-12/26
这周刷了70-80道atc(难度相当于lchard),然后两个周赛都翻车了。
Atc收获(general)
Atc的题给我感觉就很技巧,基本没有可以背板子的(除了数论的某些题)。总结一点东西:
- 第一件事就是把题目的外衣剥掉,抽象出题目到底要我们解决什么问题。
- 多个变量的情况,试着fix一个。这往往意味着加入O(N)来枚举一个变量,但是减少变量数之后经常就好做多了。这里给我印象深刻的是ABC102D Equal Cut。
- 如果感觉题目要求太复杂,可以先去除一个限制,看看能不能做。 ABC100D 选蛋糕
- 问题空间如果太大,试着缩小范围。 ABC086 Checker
- 多个维度,可能可以独立考虑。经典的场景如曼哈顿距离的xy分别考虑 ABC082 FT Robot。
- 递推。ABC116D Various Sushi
- “操作”题。比如说对一个序列/一堆东西做某几种操作,求操作最小次数之类的。
- 先试着排除一些没用的操作,或者有些操作一定在前/在后。ABC128D equeue
- 即使题目说操作是按照顺序的,也很可能不需要按照顺序。使用类似贪心的操作即可解决。ABC085D Katana Thrower ABC119C Synthetic Kadomatsu
- 对于同一个元素,根据题目的性质,常常只需要对其操作一次。这时就可以贪心做。ABC127D Integer Cards
- 构造题。
- 最好把他给的次数全用上。
- 尽量考虑简单的,极限的情况。ABC081D Non-decreasing ABC092 Grid Components ABC096D 构造合数
- 二进制构造出现频率挺高的。ABC102D All Your Paths are Different Lengths
Atc收获(具体知识点)
- XOR的各种性质。
- 每个位独立看。
- a+b = a ^ b的条件是不能同时为1.
- ”只回头一次“类型的题。基本是预处理。
- 子数组和的问题,基本是转前缀和。
- “中位数” “第k个” 之类的基本是二分。
- 动态维护中位数可以用两个pq。
- “找出A中所有的B”,常常不能在A中枚举所有的B。而是将B分解成很多b,对于每个b找出出现的次数。ABC
做得比较好的类型
- 抽象成图的各种问题。
- 离线算法(Events)的各种问题。
- 用到模板(变化不大)的各种问题。
还较弱的方面以及如何改进
- 目前最大的弱点是DP。什么时候可以用DP还不明确,目前都是随缘。
- 贪心什么时候是正确的,什么时候是错误的。
- 思维还不够灵活,看到题还不能很快地看到解题方向。
如何改进:
- 研读《挑战程序设计竞赛》的暴力、贪心、DP、二分这些章节。
- 刷cfR1500以下的DP题。不需要写,但是一定要把DP的要素写下来。
- 刷cfR1500以下的构造题锻炼思维。