传统题 1000ms 128MiB

禁区跳跃

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

你正在跨越禁区。禁区可以视为一条数轴,你初始位于 00 点,目标是 nn 点。你每次跳跃都可以向右跳跃 11 格或 33 格,不过禁区中存在 kk 处危险地带,你每次跳跃的终点不能落在危险地带中。

由于跳跃非常消耗体力,所以你想知道最少通过多少次跳跃就能跳到 nn 点?或者报告这不可能。

输入格式

第一行包含两个整数 n,kn, k (3n2×106,0k<n3 \leq n \leq 2 \times 10^6, 0 \leq k < n) — 终点的位置和危险地带的数量。

第二行包含 kk 个整数 d1,d2,,dkd_1, d_2, \dots, d_k (1din11 \leq d_i \leq n - 1) — 禁区的具体位置,保证 did_i 两两不同。

输出格式

一个整数, 表示最少的跳跃次数;如果终点无法到达,则输出 1-1

样例

5 2
3 4
3

样例解释

数轴分部形如:

. . . # # .

0 1 2 3 4 5

只能向右连跳两格,然后跳三格到达 55 号点。

提示

题目范围很大,思考一下递归超过空间限制该怎么优化。

递归算法

未认领
状态
已结束
题目
11
开始时间
2026-2-16 0:00
截止时间
2026-2-22 23:59
可延期
0 小时