小杰翻书

时间: 1ms        内存:128M

描述:

小杰正在读一本电子书。 该书的文件由n页组成,编号从1到n。 屏幕当前显示页面x的内容,小杰想要读取页面y。 书上有两个按钮,允许小杰向前或向后滚动d页(但他不能在书外滚动)。 例如,如果书由10页组成,并且d = 3,那么从第一页开始,小杰可以通过按下其中一个按钮滚动到第一页或第四页; 同理从第二页可以到第一页或第五页; 从第六页到第三页或第九页; 从第八到第五页或第十页。

帮助小杰计算按下按钮移动到第y页所需的最少次数。

输入:

输入一个整数 t (1≤t≤103),代表样例数目
每一个样例有四个整数 n, x, y, d (1≤n,d≤109, 1≤x,y≤n) ,中间用空格分开,分别表示电子书的总页数,当前页数,要到达的页数,每次滚动的页数

输出:

如果小杰能够从x页翻到y页的话,就输出最少按动按钮次数,否则输出-1

示例输入:

3
10 4 5 2
5 1 3 4
20 4 19 3

示例输出:

4
-1
5

提示:

参考答案(内存最优[1120]):

#include<stdio.h>
int main()
{
    int t;
    int n,x,y,d,ans;
    scanf("%d",&t);
    while(t>0)
    {
        scanf("%d%d%d%d",&n,&x,&y,&d);
        int a;
        if(x<y)
            a=y-x;
        else
            a=x-y;

        if(a%d==0)
            ans=a/d;

        else if(a%d!=0)
        {
            int cnt=0;
            if((y-1)%d==0)
            {
                if((x-1)%d==0)
                    cnt=(x-1)/d;
                else
                    cnt=(x-1)/d+1;
                ans=cnt+(y-1)/d;
            }
            else if((n-y)%d==0)
            {
                if((n-x)%d==0)
                    cnt=(n-x)/d;
                else
                    cnt=(n-x)/d+1;
                ans=cnt+(n-y)/d;
            }
            else
                ans=-1;
        }
        printf("%d\n",ans);
        t--;
    }
    return 0;
}

参考答案(时间最优[2]):

#include<stdio.h>
int main()
{
    int t;
    int n,x,y,d,ans;
    scanf("%d",&t);
    while(t>0)
    {
        scanf("%d%d%d%d",&n,&x,&y,&d);
        int a;
        if(x<y)
            a=y-x; else
                a=x-y;
        if(a%d==0)
            ans=a/d; else if(a%d!=0)
            {
                int cnt=0;
                if((y-1)%d==0)
                {
                    if((x-1)%d==0)
                        cnt=(x-1)/d; else
                            cnt=(x-1)/d+1;
                    ans=cnt+(y-1)/d;
                } else if((n-y)%d==0)
                {
                    if((n-x)%d==0)
                        cnt=(n-x)/d; else
                            cnt=(n-x)/d+1;
                    ans=cnt+(n-y)/d;
                } else
                    ans=-1;
            }
        printf("%d\n",ans);
        t--;
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。