核心思路
允许的步长是 [1,x−1]∪[y+1,n−1]。起点固定为 1,目标为 k。n 很大,不能建图,但最短路只用得上 0、1 或 2 次长跳(步长 >y)。
一条测试台上有 n 个卡槽排成一行,编号从 1 到 n。调试员一开始站在第 1 号卡槽,要把探针移到第 k 号卡槽。
每次可以把探针从当前卡槽跳到任意另一个卡槽,但不能跳到 [1,n] 之外。一次移动的步长是两卡槽编号差的绝对值。监测系统会记下步长落在闭区间 [x,y] 内的移动;步长严格小于 x 或严格大于 y 时不会被记录。
调试员只做不会被记录的移动。可以证明当 x≥2 时他一定能到达第 k 号卡槽。求最少需要多少次移动。
每个测试文件包含多组测试数据。第一行一个整数 T(1≤T≤5×104),表示数据组数。
接下来 T 行,每行四个整数 n、x、y、k:
对每组数据输出一行一个整数,表示到达第 k 号卡槽所需的最少移动次数。
输入
3
9 2 8 9
15 4 9 13
100 5 70 40
输出
8
1
5
说明
第一组:y=n−1,可行步长只有 1,从 1 号到 9 号需要 8 次。
第二组:步长 12>y,一次即可到达。
第三组:不能一步到达。先从 1 跳到 100,再跳到 29,然后依次走到 33、37、40,共 5 次。若全程只用短步,需要 10 次,更差。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册