试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。
按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。
KOI 村庄由 个建筑和 条道路组成。
建筑从 1 到 编号,每个建筑可能有也可能没有窗户。对于 的每个 ,如果第 个建筑有窗户,则 ,如果没有窗户,则 。规定第 1 个建筑和第 个建筑没有窗户,即 。
道路从 1 到 编号,每条道路都是连接一个起始建筑和一个到达建筑的单向通道。对于 的每个 ,第 条道路从建筑 开始,到建筑 结束,通过这条道路需要花费恰好 秒。因为是单向道路,所以不能逆向行驶(即,从建筑 移动到建筑 )。
在 KOI 村庄,Hankook 和 Jeong-ul 打算玩一个基于“木槿花开了”游戏改编的以下游戏。
游戏开始时,Jeong-ul 在 1 号建筑。Jeong-ul 的目标是在不被 Hankook 的视线发现一次的情况下,尽可能快地到达 号建筑。相反,Hankook 的目标是在 Jeong-ul 到达 号建筑之前找到他。
Hankook 睁着眼时可以看到整个 KOI 村庄,但无法看到没有窗户的建筑内部。也就是说,Hankook 只能看到有窗户的建筑内部和所有道路。
Hankook 从游戏开始(0 秒)时起,周期性地重复以下动作:
- 首先,闭上眼睛恰好 秒。
- 紧接着,睁开眼睛并观察村庄恰好 秒。
- 此过程无限重复。
我们可以将上述过程用数学公式严格地表达如下:
- 我们定义“从游戏开始时经过的时间”为 (以秒为单位)。
- 当时间 时(其中 为非负整数, 为满足 的实数):
- 如果 ,Hankook 闭着眼睛。
- 如果 ,Hankook 睁着眼睛。
- 也就是说,对于非负整数 ,Hankook 闭眼的时间是闭区间 ,睁眼的时间是开区间 。
Jeong-ul 从游戏开始的时刻(0 秒)起,可以随时开始移动,并且在建筑内部(无论是否有窗户)等待和移动都是自由的,不消耗时间。从建筑出来或进入建筑内部也不消耗时间。如果 Jeong-ul 开始沿着某条道路移动,他必须花费该道路所需的确切时间来移动,并且在移动过程中不能在道路上停下或等待。移动结束后,他将到达道路的终点建筑。
Jeong-ul 被 Hankook 发现的基准如下:
- 在 Hankook 睁着眼的时候,如果 Jeong-ul 位于道路上或在有窗户的建筑内部,他会立即被发现,游戏随之结束。因此,在 Hankook 睁着眼的时间段内,Jeong-ul 必须位于没有窗户的建筑内。
- 在 Hankook 闭着眼的时候,无论 Jeong-ul 在哪里,都绝对不会被发现。
- 请注意,如果 Jeong-ul 进入没有窗户的建筑的时刻,恰好是 Hankook 开始睁眼的瞬间;或者他进入道路开始移动的时刻,恰好是 Hankook 开始闭眼的瞬间,则不会被发现。
在这些条件下,请编写一个程序,判断 Jeong-ul 是否有可能在不被 Hankook 发现一次的情况下安全到达 号建筑,如果可能,计算 Jeong-ul 到达 号建筑所需的最短时间(以秒为单位)。