Description
坐标系上有一只小船,现在想从 $(x_1,y_1)$ 去 $(x_2,y_2)$ 。每时刻都有风,会把船往对应的风向吹一个单位,风是循环的,吹完 $s_1 \sim s_n$ 就又会从 $s_1$ 开始。船在每一时刻都可以向指定方向移动一个单位。求船到目的地的最少时间,如果不能到达输出 -1 。$(1 \leq n \leq 10^5,0 \leq x_1,x_2,y_1,y_2 \leq 10^9)$
Source
Solution
考虑 二分答案 。
首先要想到一个转化。虽然风吹与船行同时进行,但我们可以先让风吹完了再让船走。由于我们已经二分得到了时间,所以风吹完后小船的坐标我们是已知的(可以用前缀和预处理 $s_1 \sim s_n$ 前 $i$ 时刻每种风的数量),而小船到目的地的最短距离就是该坐标与目的地的 曼哈顿距离 。如果这个距离不超过时间,说明船是可以在规定的时间之内到达的。
二分的下界显然是 $0$,上界怎么算呢?如果风一直把船往与目的地相反的方向吹,只有一个时刻的风是相同方向的,那样经过 $n$ 时刻才能移动 $2$ 格,因此最坏情况下需要 $10^{14}$ 的时间。总时间复杂度为 $O(\log \max\{ans\})$ 。
Code
1 |
|