20230925~20231001
[ABC321E] Complete Binary Tree
二叉树,计数。
每次往上跳 father 的时候算一算就行,答案是一个等比数列求和状物。
test20230925
前一天没睡好,感觉脑子根本不转,考的很烂,应该要想到的东西没想到。
T1:写了个很劣的 dp,知道不能把 \(s\) 放在状态里,但是没想到直接乘个组合数就行。还有特殊性质 A,所有路径代价相等也没有发现。正解是发现每一层的转移都相同,用快速幂优化。
T2:感觉是不可做数学题,好心的帝王在样例 2 中给出了前 5 分的答案。
T3:不给 hash 分差评,特殊性质漏了一种情况很蠢。
T4:没时间了,25 分的网络流是应该要会的。
CF1401F Reverse and Swap
线段树。
一眼线段树,但是不会 2、3 操作。
注意到 2、3 操作都是以 \(2^k\) 位单位,刚好对应线段树上的节点,且都可以被交换相邻左右儿子所表示。记 \(tag_i\) 表示第 \(i\) 层是否交换即可。
[ABC321F] #(subset sum = K) with Add and Erase
01 背包。
感觉从二维转移思考就不太好想,考虑一维的做法,与物品的顺序无关,减操作正序清掉 \(x\) 的贡献即可。
不要忘了 01 背包有一维的做法啊!
[ABC321G] Electric Circuit
状压 dp,子集枚举。
应该是要会的,没有什么很难想的地方,还是做题时自己思考少了,总是在听别人讲或者看题解。
CF1404C Fixed Point Removal
线段树,树状数组。
先不考了 \(x,y\) 的限制,得到 \(b_i\) 表示 \(i\) 前面需要删几个才能删到它,\(c_i\) 表示 \(i\) 前面最多能删几个,如果 \(c_i\geq b_i\) 则 \(i\) 可以被删掉,现在问题就是如何维护 \(c\)。
发现删掉 \(i\),\(i\) 后所有 \(c_j\) 都要 \(-1\),考虑离线按 \(x\) 从小到大排序,操作完前缀后找到第一个新的不合法位置继续修改,可以用线段树数维护,由于每个位置至多找到一次,因此复杂度为 \(O(n\log n)\)。树状数组用来求 \(c\) 和维护答案。