Princeza-题解

原题链接:Link

题目描述

Luka(女司机)把卡车停在湖边。Barica,Luka 知道她亲吻Barica,她会变成一个美丽的公主。但是,她需要先抓住她!

可以用一对坐标定义湖面上植物的位置。Barica 可以从 \((x, y)\) 植物跳跃到其它植物所在位置,\(p\) 为任意正整数,下面给出了4种跳跃方式:

方向 A:\((x + p, y + p)\)

方向 B:\((x + p, y - p)\)

方向 C:\((x - p, y + p)\)

方向 D:\((x - p, y - p)\)

Barica选择四个方向之一,然后沿所选方向跳到该方向的第一个植物上。如果在选定的方向上没有植物,Barica将留在原处

Barica跳完这一步之后,原来位置的植物将立马消失了。知道植物的位置和 Barica 选择的方向顺序后,Luka 希望确定Barica 最终将停留的植物的坐标。Luka 将在Barica最终的位置等她,亲吻她。编写一个解决Luka 问题的程序,并帮助她变成美丽的公主。

思路分析

显然,Barica只能沿着对角线方向跳。

但直接沿着对角线枚举太慢了,所以,对于每个节点,我们维护四个指针,指向其左上、右上、左下、右下的点,这样就可以在 \(\Theta (n)\) 的复杂度模拟。

但为了建立这个图,我们需要 \(\Theta (nlogn)\) 进行排序。

AC代码