P15541 [CCC 2026 S1] Baby Hop, Giant Hop
题目描述
青蛙萨曼莎在排成一条直线、等间距分布的荷叶间跳跃。荷叶的数量是无限的。荷叶按顺序用整数编号。每个整数都对应一片荷叶。
萨曼莎从编号为 $A$ 的荷叶出发,想要跳到编号为 $B$ 的荷叶。她可以做出长度为 $K$ 的大跳跃,或者长度为 $1$ 的小跳跃。每次跳跃既可以向前也可以向后。
萨曼莎想知道从 $A$ 到 $B$ 所需的最少跳跃次数。但有时,她也想知道第二少的跳跃次数。
输入格式
输入的第一行包含一个整数 $A$,表示起始荷叶的编号($-10^{18} \le A \le 10^{18}$)。
第二行包含一个整数 $B$,表示目标荷叶的编号($-10^{18} \le B \le 10^{18}$)。
第三行包含一个整数 $K$,表示一次大跳跃的距离($2 \le K \le 10^{18}$)。
第四行包含一个整数 $T$,取值为 $1$ 或 $2$,表示需要求出最少(当 $T = 1$ 时)还是第二少(当 $T = 2$ 时)的步数。
输出格式
输出一行,包含:
- 如果 $T = 1$,输出最少的跳跃次数;
- 如果 $T = 2$,输出第二少的跳跃次数。
说明/提示
#### 样例输入 1 的输出解释
萨曼莎用三次大跳跃跳到编号为 $3$、$6$ 和 $9$ 的荷叶,然后用一次小跳跃跳到编号为 $10$ 的荷叶。
#### 样例输入 2 的输出解释
萨曼莎用三次大跳跃跳到编号为 $4$、$8$ 和 $12$ 的荷叶,然后用一次(向后的)小跳跃跳到编号为 $11$ 的荷叶。
#### 样例输入 3 的输出解释
最少的跳跃次数($4$)已在样例 2 中得到。由于 $T = 2$,本输入需要求出第二少的步数。萨曼莎用两次大跳跃跳到编号为 $4$ 和 $8$ 的荷叶,然后用三次小跳跃跳到编号为 $11$ 的荷叶。
以下表格显示了 15 分是如何分配的:
| 分值 | $A, B$ 的范围 | $K$ 的范围 | $T$ 的范围 | 附加限制 |
|:-:|:-:|:-:|:-:|:-:|
| 5 分 | $0 \le A, B \le 10$ | $K = 2$ | $T = 1$ | 只需正向跳跃 |
| 6 分 | $-10^{18} \le A, B \le 10^{18}$ | $2 \le K \le 10^{18}$ | $T = 1$ | 无 |
| 2 分 | $0 \le A, B \le 100$ | $2 \le K \le 4$ | $T = 1$ 或 $T = 2$ | 无 |
| 2 分 | $-10^{18} \le A, B \le 10^{18}$ | $2 \le K \le 10^{18}$ | $T = 1$ 或 $T = 2$ | 无 |
注意,要获得满分,解决方案需要处理 64 位整数。例如:
- 在 C/C++ 中,应使用 **long long** 类型;
- 在 Java 中,应使用 **long** 类型。
翻译由 DeepSeek 完成