关于坐标系旋转的小trick
这个 trick 算是比较经典的一种,而且属于基本上看到后就会记住,而且特征非常的明显。
简述
对于某一类特定的题目,会有多个点在特定的一类图上按照固定的方向做匀速运动的题目,我们可以通过以时间为横坐标,特定的内容(如深度,位置)为纵坐标来使用坐标轴进行刻画。此时我们可以发现直线都是形如
据野史考究,这个小技巧最早出现 NOI2008 糖果雨,具体我也不清楚。
旋转变换坐标系
首先我们先来看进行旋转后的坐标变化:
对于原坐标为
将
代入三角函数值化简:
最终得到公式:
我们考虑将坐标长度等比放大
题目一 树上行走
我们需要找到一个快速的方法来表示对于每个时刻每个人的位置,我们可以考虑在坐标轴上刻画这个操作。
我们以时间为横坐标,深度为纵坐标来建立坐标系,不难发现每次移动都是在坐标系上做斜率为
我们对于斜线不是很好处理,于是考虑将斜线转化为直线,不难想到将坐标旋转
此时我们可以将斜线转化为水平或者平行于坐标轴的直线,问题可以转化为:对每⼀条线段求出在线段上哪个点的相交次数最多?
于是可以顺利成章的对这个坐标轴两个方向分别做扫描线,于是题目就做完了。
题目二 保镖
本题也是一个卡时旋转坐标系的好题,感觉也是一个拼好题。
我们考虑类比上一题,以时间--位置为横纵坐标。此时不难发现每次移动都是在坐标系上做斜率为
于是还是旋转坐标系,变成垂直或水平的直线,然后对坐标进行一次离散化。
由于我们线段的长度发生了变化,此时我们将
然后我们只有
我们定义:
剩下的就是另一个问题了,我们发现保镖不一定在格点上!
询问点之后的第一条横线和纵线。最优情况一定是从起点到这两条线上某个离散化点的收益加上该点的最大收益。
不难发现最大收益形如
上一个题目是以时间--位置为横纵坐标,这不由得会联想到一个新题目:
题目三 P15246 [WC2026] 猫和老鼠
我们不难发现我们还可以延续上一个题的方法,于是可以把题目转化为:是否存在从左下走到右上,且穿越不超过
对于
我们可以刻画出上图的情况,我们可以考虑对这些图定向,也就是说,需要找出一条如下路径:从左上边界出发,可以任意向左或向上,或根据机械猫形成的线段向右或向下,直到抵达右下边界。
对于第二类很明显,对于第一类我们可以看直线
于是我们可以考虑建图,对于
对于
具体内容可以移步该题目题解 耗子与猫题解
总结
这个小技巧个人感觉没必要练习太多的题目,且样貌明显。一般都会衔接如扫描线,dp,最短路,网络流等算法综合考察。