Vasya and Book-模擬
阿新 • • 發佈:2018-12-01
- http://codeforces.com/contest/1082/problem/A
- 根據題意模擬即可,合法情況有三種 :1.之間的距離是每次翻頁的倍數,2.無需管x-n是否是翻頁的倍數,
- 只需計算需要幾次即可,但是n-y之間的路徑必須得是翻頁的倍數。3.無需管1-x是否是翻頁的倍數,
- 只需計算需要幾次即可,但是1-y之間的路徑必須得是翻頁的倍數。除了這三種合法的其他情況都不可以
-
#include<bits/stdc++.h> using namespace std; #define ll long long ll t,n,d,x,y,a,ans,s1,s2,s3,s4; int main() { scanf("%lld",&t); while(t--) { scanf("%lld%lld%lld%lld",&n,&x,&y,&d); if(x>y)a=x-y; else a=y-x; if(a%d==0) { ans=a/d; printf("%lld\n",ans); } else { s1=(n-y)/d; s2=(y-1)/d; s3=(n-x)/d; s4=(x-1)/d; if((n-x)%d!=0) s3++; if((x-1)%d!=0) s4++; if((n-y)%d!=0&&(y-1)%d!=0) printf("-1\n"); else if((n-y)%d==0&&(y-1)%d==0) { if(s1+s3<=s2+s4) ans=s1+s3; else ans=s2+s4; printf("%lld\n",ans); } else if((n-y)%d==0) { ans=s1+s3; printf("%lld\n",ans); } else if((y-1)%d==0) { ans=s2+s4; printf("%lld\n",ans); } } } return 0; }