Jzoj1973 信号塔

  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也不是很清楚)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值