A
- tag:签到题
- 注意到定住一个值后,左边的值全都得改,右边的值也全都得改
- 注意到,定住的越多,需要改的就越少
- 所以开桶记一下哪个值最多就行
B
- tag:诈骗诈骗签到题
- 读完题容易产生 naive 结论:当且仅当错位的两个地方相邻可以修复,其余情况全部无法修复
- 感觉真不了一点,于是找三个数 ABC 来手模一下
- 发现这个结论好像是真的,交一发
- 过了,那就真了吧
C
- tag:究极神迷构造题
- 注意到如果是偶数直接 11 22 33 44 55 66 就好了
- 接下来讨论奇数
- 注意如果是奇数,必然至少存在一个数出现了奇数次
- 所以必然存在三个点 \(A,B,C\) 使得 \(|AB|^2+|BC|^2=|AC|^2\)
- 注意到最小的满足 \(a^2+b^2=c^2\) 的正整数三元组是 \((3,4,5)\)
- 考虑如何构造:
- 1 10 26 放一个数
- 23 27 放一个数
- 24 25 放一个数
- 其余地方两两一组放即可
- 显然小于 27 的奇数无解
D
- tag:好题
Sol 1 并查集
- 首先注意到正着跳和反着跳是互逆的,所以我们可以看成只有正或只有反,然后连无向边
- 考虑并查集
- 显然,对于每个 \(i\) 都需要向它前面的比它高的点连边,时间复杂度 \(O(n^2)\),不可接受
- 考虑优化
- 用一个 pq 维护 \(i\) 之前比 \(i\) 还高的点,键是高度,连一个 pop 一个,并查集同时维护最高高度,离开 \(i\) 时将 \(i\) 和 \(i\) 能到达的最高高度压入 pq 即可
- 显然对于每个 \(i\),最多进出 pq 一次,所以复杂度 \(O(n\log n)\)
Sol 2 Clever 做法
- 注意到从一个点开始可能先往后再往前,顺序处理比较麻烦。
- 我们考虑最开始可以较为简单求出答案的点,容易发现 \(a_i\) 最大的点往后的点肯定跳到这个点上。
- 于是每次求出答案未确定的点中 \(a_i\) 最大的点。如果它能跳到 \(j\) 且 \(j\) 的答案已求出,答案 \(ans_i=ans_j\) (我们是从大往小枚举,先求出的答案肯定大)。 再让它后面所有没求出答案的 \(j\) 答案为 \(ans_i\) 。
- 非常优美,时间复杂度 \(O(n)\)
E
- tag:好题
- 根据直觉考虑树形 dp
- \(f_{u}\) 表示子树 \(u\) 可满足同构所需最小完美二叉树深度
- 考虑转移:
- 考虑没有儿子:由于这道题的深度是 0-index,直接返回即可
- 考虑只有一个儿子:\(f_{u}=f_{v}+1\)
- 考虑有两个儿子:\(f_{u}=\max(f_{v})+1\)
- 考虑有好多好多儿子:显然必须逐个合并,考虑合并顺序
- 显然先合小的更优,于是每个点开 pq 即可
- 答案即为 \(f_{1}\)