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;
}
原文地址:https://www.cnblogs.com/heyuhhh/p/10047889.html