中文题意:

思路:我们先看看能不能直接从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 }

 

分类: 未分类

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注