在一个平行世界的太阳系中,所有行星恰好构成一个长度为 n 的环,按顺时针依次编号为 1,2,... ,n 。相邻两颗行星间距离相等,且保证 n 为偶数。 你位于编号为 a 的行星,目标是到达编号为 b 的行星。你可以执行以下三种操作,每次操作均消耗 1 个单位时间: 顺时针移动 x 颗行星; 逆时针移动 y 颗行星; 发动一次传送技能(最多可使用 k 次),将你顺时针移动 (n/2) 颗行星,即跳到正对面的那颗行星。 请你计算,从 a 行星移动到 b 行星的最少时间;若无论如何都无法到达,则输出 -1 。
在一行上输入 6 个整数 n,k,a,b,x,y ,含义分别为: n(2 ≤ n ≤ 2× 10^5) ——行星数量,且 n 为偶数; k(0 ≤ k ≤ 2× 10^5) ——技能可使用的最大次数; a,b(1 ≤ a,b ≤ n) ——起点与终点的编号; x,y(1 ≤ x,y ≤ n) ——每次普通移动的距离。
输出一个整数,表示最少所需时间;若无法到达,则输出 -1 。
4 0 1 2 2 1
2
4 114514 1 3 1 1
1
4 114514 1 2 2 2
-1
考点:广度优先搜索(BFS)
数据规模 n ≤ 200000 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:广度优先搜索(BFS)
按层扩散搜索,无权图上第一次到达即最短路。
思路框架(广度优先搜索(BFS) 通法 · 非本题专属)
实现要点:标记访问必须在入队时做,不能在出队时做,否则会重复入队甚至超时。
复杂度:时间 O(V+E) | 空间 O(V)
该范式的通法易错点
对照本题
样例 1:输入 4 0 1 2 2 1 → 输出 2
你可以先顺时针移动 x=2 颗行星到达编号 3 ,再逆时针移动 y=1 颗行星到达编号 2 ,共耗时 2 。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:华为机试编程模拟题10。