lanwuni接到一个任务,在C市建立N个信号塔来完成城市中的通讯任务。
假设C市是一个坐标范围[-2000000,2000000]的网格,一些整点上有用户,你也可以在整点上建立信号塔。
一个点上可以建立多座。 在C市,两点之间的距离是曼哈顿距离,也就是横纵坐标差值之和。
每个信号塔都有一个半径Di,表示与i曼哈顿距离不超过Di的地方都能被这个信号塔的信号覆盖到。
建立信号塔要满足一些性质:
1. 每个信号塔有一定的用户,lanwuni要把信号塔建立在某个地方,使得属于该塔的用户都能被信号覆盖到;
2. 信号塔有一定等级和安装限制,所以,第i号信号塔能覆盖的所有整点,必须也被第i+1号信号塔覆盖到。即使这个整点上没有用户。
现在告诉你每个信号塔的半径,以及每个信号塔的用户,请你帮lanwuni谋划一下应该把这N个信号塔建立在什么地方,保证有解。
非常好的计算几何题
首先,显然一个信号塔的范围是多个菱形的交,最后是一个平行四边形
但是直接并起来非常不方便,因为斜着的平行四边形不好直接求交
我们将其旋转π/4并乘上√2变成整数运算,那么坐标就变成了(X-Y,X+Y)
变换完之后,每个信号塔的范围就是用户的范围交起来,让后根据半径的差值来倒序确定每个灯塔的范围,到1的时候随便选一个点作为答案
注意:坐标的逆变换公式为(X+Y/2,-X+Y/2)所以要考虑奇偶性,做一些微调即可
(这种题就是这么恶心,很难讲清楚,还是靠自己意会比较重要,有Solution也不是很清楚)