原题链接(https://codeforces.com/contest/1759/problem/D)
题意简述
共t组输入
每组输入五个整数l,r,x,a,b(l<=a,b<=r)
对于a的操作,可从a变成c,但要保证|c-a|>=x,并且l<=c<=r
问从a到b的最少操作步数为多少,若不能到b则输出-1
个人分析
1,a=b,步数为0
2,|a-b|>=x,直接a到b,步数为1
3,当 a 能直接到左边界l,且l能直接到 b 时,或当 a 能直接到尤右边界r,且r能直接到 b 时,步数为2
4,当 a 能到左右边界的任意一个,且 b 也能到左右边界的任意一个时,步数为 3
AC代码
点击查看代码
int l,r,x,a,b;
cin >> l >> r >> x >> a >> b;
if(a==b){cout << 0 << endl; return ;}
int ans=abs(a-b);
if(ans>=x && b>=l && b<=r){cout << 1 << endl; return ;}
if((a+x>r && a-x<l) || (b+x>r && b-x<l)){cout << -1 << endl; return ;}
if((abs(a-l)>=x && abs(b-l)>=x) || (abs(a-r)>=x && abs(b-r)>=x)){cout << 2 << endl; return ;}
cout << 3 << endl;