20220924 考试总结
考试
T1
中规中矩的动态规划题。但我选择读错题。
求最长周长可以用一列一列考虑,处理出每个点向上延申的最上面的位置,用单调栈维护这个东西,然后可以做到 $O(点数)$ 处理。
T2
又是逆向考虑的标准题目。
考虑最终答案的直径,对于直径这种东西,它的中点是非常特殊的,因为从中心到两边的距离是相同的。
这道题又要最小化直径生成树,也就是最小化中心到两边的距离,那从中心到某个点最小距离的最大值恰好就是直径的一般,所以对每个点跑一遍 BFS,求出 BFS 树的直径即可。
不难得到一个结论:最小直径生成树的直径中点(有可能在一条边上)是图的绝对中心,其中图的绝对中心可以存在于一条边上或某个点上,该中心到所有点的最短路的最大值最小。
T3
算是套路的反向转对穿。
称将反向视为对穿后形成的局面为对照局面,那么对照局面的周期为 $2L$,故问题周期为 $2L$,转化为 $T\le 2L$。
考虑往回走比较恼火,转化为撞墙后继续走,然后有一个相同颜色的人在此时出发,即在最初在一个对应的位置准备出发,容易发现仍然没有两个点在同一位置。
扩大了 $n,m$ 的范围以及数轴的考察范围,但是不用考虑转向了,难度实际上降低了。
由于有颜色差别,所以可以分出两种思考方向。
换衣服
两个 Heren 相遇后换衣服,从左往右依次考虑每个向左的 Heren,除了第一次之外,都是右边的 Heren 在相邻之间换衣服(向左的那个 Heren 和第 $i$ 个换衣服之后马上和第 $i+1$ 个换),相邻向左的 Heren 换衣服是可以快速计算区间答案的(或者说用扫描线后是均摊 $O(1)$ 的)。
回到初始局面
考虑将对照局面的相遇和原局面的相遇,只需要求出相遇位置的排名,就可以对应回原局面的情况,注意从 $[0,L]$ 之外出发的点,是什么颜色其实并不重要,因为排名落在这些区间的相遇,一定在 $(0,L)$ 外面,注意是开区间,所以还需要妥善处理边界。
发现每一个向左的点的所有相遇事件,其位置的排名单调递增,对应的坐标也单调递增,回到原序列相邻元素是一个区间加。
思考这个方式的本质,和换衣服的思路没有太大差异。
敲下"相遇"的时候,差点又掉眼泪....
T4
考场上想到了处理移动相交转图上问题搞,但是相交关系比较多,这个思路走不动。
首先得发现一件事,如果用一个方向的移动完全可以移动完,证明考虑找左端点最靠左然后最靠上的,所以左端点一定不会被遮挡,然后如果这条线段被另一些线段遮挡,那么找到遮挡它的线段中左端点最靠左然后最靠上的,依次找下去,左端点递增,所以一定会找到一个不被遮挡的线段,移除它就行。
考虑构造一种方案,不妨要求必须往上移动,对每个方向分别求最早的一次不合法,其它情况可以转坐标系。
考虑求出一个方向上,遮挡限制关系构成的图,首先它一定是个 DAG。我估计我是想不到的,但可能确实平面组合几何问题应该考虑扫描线,由于线段不交,所以扫描线与对应线段交点的相对位置永远不变,用 set 维护扫描线即可,加入时会多出 $O(1)$ 条边。这样构建出来的图是可以正确描述遮挡关系的,感性理解挺容易的,证明有点难写。
拓扑排序之后第二问做完了,第一问的话,如果出现了拓扑序较大的先被移动了,那么就是不合法的,但是需要注意拓扑序只是一个比较松的限制,还需要加上横坐标区间有交才是两条线段存在先后限制的充要条件,证明是显然的。
需要注意的是,这道题用了 set
去维护边,其中涉及到了浮点数的运算和比较,所以 erase
的时候需要考虑浮点误差。