11.11练习赛
11.11练习赛
三道Atcoder原题,一道OJ原题
T1 ABC:贪心
统计前缀A个数。做完了。十分钟打完,调了3分钟。
T2 Complete Compress :大法师+贪心
做了个错解跑路,拿了35.
正解:
由于\(n\)非常小,只有2000,我们便可以放心枚举根节点。
首先发现一个非常显然的性质:如果每个点到根节点的距离之和为奇数,则不可能把所有点移动到同一个地方。
然后考虑如何把所有点都移动到根节点上:
- 首先思考这个东西能不能分治——很明显是可以的,把所有能合在一起的点尽量先合在一个点上。,
- 再考虑这移动的顺序:首先肯定使用最深的点来与其他较浅的点进行配对,让其它较浅的点先跑到根节点。
- 此时根据原最深点的深度可以分两种情况:1.使用最深点转移其他所有点后最深点仍未到达根节点。2.最深点无法转移完其它点。
- 对于第一种,我们直接认为这颗子树的所有棋子都集中在子树的根上,并在最深点转移完的位置上有一个棋子。
- 对于第二种,我们还可以使用剩余的点互相进行转移。由于距离和不是奇数就是偶数,可以认为最后最多有一个点与根节点的距离为1,且此时距离和为奇数。
- 由于我们用的是分治,确保了子树中合并了的棋子集中在根节点旁边,所以上面的思路是正确的。
T3 邮票拉力赛 : 整体二分/克鲁斯卡尔重构树
写的整体二分,不小心写成了\(n^2log(n)\)的复杂度,调了一个小时。
解决方法:主要问题在于并查集。如果并查集每个区间都重置会导致复杂度上升\(n\),但是我们又很懒,不想写可回退的并查集。此时我们注意到每层二分区间(可参考线段树的图像化)都是连续的,所以我们可以给每层区间都开一个并查集,然后根据当前区间的\(mid\)依次合并边。
不会克鲁斯卡尔重构树。
T4 Median Pyramid Hard : 二分答案
30分的暴力跑路。当时没看出来性质。
性质非常奇怪,但是很神奇。
[无法描述.gif]

浙公网安备 33010602011771号