cf1082 A. Vasya and Book

让人想犯罪 __ 提交于 2019-11-27 19:35:27

中文题意:

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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!