思路:
3种方式:直接跳,调到最前面再跳回来,跳到最后面再跳回来。
要注意x可能大于y,要写abs(y-x)。
代码:
#include<bits/stdc++.h>
using namespace std;
#define read(x) scanf("%d",&x)
int main() {
int T;
read(T);
while(T--) {
int n,x,y,d;
read(n),read(x),read(y),read(d);
int ans=1+(int)1e9;
if(0==(y-x)%d) ans=min(ans,abs(y-x)/d);
if(0==(y-1)%d) ans=min(ans,(y-1)/d+(x-1)/d+(0!=(x-1)%d));
if(0==(n-y)%d) ans=min(ans,(n-y)/d+(n-x)/d+(0!=(n-x)%d));
if((1+(int)1e9)==ans) printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}