思路讲解:
这道题真的有点抽象了,我只能说,首先我们要合理的推断出它其实是只有0,-1,1,2,3这几种情况的,然后我们思考如何来对应哪种情况
首先a点和b点位置相同的情况,这时不需要进行跳跃,移动,直接结果就是0
然后讨论a不可能到达b的情况,这时有两种可能,要不a点不能跳,从a到达不了任何的点,要不就是可以跳但是到达不了b点,跳最远肯定是从l或是r开始跳,要是b点距离l和r都太近了,那么是不行的,这两种情况都是-1,不可到达
然后说一下1,2,3这三种情况,1好说,就是一步就可以到达,那么就是a和b距离足够远,a和b之间的距离大于x,2的话,说明一步达到不了,那么就是a和b太近了,那么先从a跳到l,再从l跳回b
即从a跳到一个端点,然后再从此端点回跳回来就好了,这是2步,剩余情况就是三步
代码实现:
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int l,r,x;
cin>>l>>r>>x;
int a,b;
cin>>a>>b;
if(a==b)
{
cout<<"0"<<endl;
return;
}
if((abs(a-l)<x && abs(a-r)<x) || (abs(b-l)<x && abs(b-r)<x))
{
cout<<"-1"<<endl;
return;
}
else
{
if(abs(a-b)>=x)
{
cout<<"1"<<endl;
return;
}
else if((abs(a-r)>=x && abs(b-r)>=x) || (abs(a-l)>=x && abs(b-l)>=x))
{
cout<<"2"<<endl;
return;
}
else
{
cout<<"3"<<endl;
return;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}