中文题意:

思路:我们先看看能不能直接从x翻到y,abs(y-x)%d==0,可以就直接输出abs(y-x)/d咯,不行的话之后有2种操作
1.先翻回到第一页,从第一页看看能不能范到y,不能的话翻到最后一页,倒回来翻看看能不能翻到y,不能的话这种方法不行;
2.翻到最后一页,倒回来看看能不能翻到y,不能的话翻到第一页,看看能不能从第一页翻到y,不能的话这方法不行;
如果1,2方法都不行,那肯定一直都翻不到y页了;如果其中一方法可以,另一方法不可以,输出可以的;都行的话输出翻次数小的就行
附ac代码:
1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #define maxn 100
7 using namespace std;
8 int main(){
9 int t;cin>>t;
10 int a,b,c,d;
11 int n,m,q,p;
12 while(t--){
13 int x=0,y=0;
14 cin>>a>>b>>c>>d;
15 if(abs(b-c)%d==0){
16 cout<<abs(b-c)/d<<endl;
17 continue;
18 }
19 else{
20 if((b-1)%d==0)n=(b-1)/d;
21 else n=(b-1)/d+1;
22 if((c-1)%d==0)m=(c-1)/d;
23 else{
24 if((a-1)%d==0)m=(a-1)/d;
25 else m=(a-1)/d+1;
26 if((a-c)%d!=0)x=-1;
27 else x=(a-c)/d;
28 }
29 if((a-b)%d==0)q=(a-b)/d;
30 else q=(a-b)/d+1;
31 if((a-c)%d==0)p=(a-c)/d;
32 else{
33 if((a-1)%d==0)p=(a-1)/d;
34 else p=(a-1)/d+1;
35 if((c-1)%d!=0)y=-1;
36 else y=(c-1)/d;
37 }
38 }
39 if(x==-1&&y==-1)cout<<-1<<endl;
40 else cout<<min(n+m+x,q+p+y)<<endl;
41 }
42 return 0;
43 }