Educational Codeforces Round 55:A. Vasya and Book
A. Vasya and Book
题目链接:https://codeforc.es/contest/1082/problem/A
题意:
给出n,x,y,d,x是起点,y是终点,d是可以跳的格数,注意是不能跳出边界,最少跳到1,最多跳到n。问最少跳到y的步数是多少。
题解:
从x到y,有三种途径,一是从x直接跳 |y-x|/d 步到y;二是先从x跳到1,然后再跳到y;三是先从x跳到n,然后再跳到y。
注意一下从x跳到边界的步数就好了。
代码如下:
#include <bits/stdc++.h> using namespace std; long long t,n,x,y,d; int main(){ cin>>t; while(t--){ cin>>n>>x>>y>>d; bool flag=false; long long ans=9999999999; if(abs(y-x)%d==0) ans=abs(y-x)/d; if((y-1)%d==0 ) ans=min(ans,(x-1)/d+((x-1)%d!=0)+(y-1)/d); if((n-y)%d==0 ) ans=min(ans,(n-x)/d+((n-x)%d!=0)+(n-y)/d); if(ans!=9999999999) cout<<ans<<endl; else cout<<"-1"<<endl; } return 0; }
重要的是自信,一旦有了自信,人就会赢得一切。