- 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; }
Vasya and Book-模拟
猜你喜欢
转载自blog.csdn.net/BePosit/article/details/84595352
今日推荐
周排行