中文题意:
思路:我们先看看能不能直接从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 条评论