Steps 数论水题

来源:互联网 发布:淘宝开店协议无法同意 编辑:程序博客网 时间:2024/05/29 14:17

原题

Description
One steps through integer points of the straight line. The length of a step must be nonnegative and can be by one bigger than, equal to, or by one smaller than the length of the previous step.
What is the minimum number of steps in order to get from x to y? The length of the first and the last step must be 1.


Input
For each test case, a line follows with two integers: 0 <= x <= y < 2^31.



Output
For each test case, print a line giving the minimum number of steps to get from x to y.



Sample Input
45 48
45 49
45 50


Sample Output
3
3
4

题意:从x走到y,要求第一步和最后一步步长为1,相邻两步长度差距不超过1(例123221合法,124221不合法),求最短步数

解:由题意可知,走的步长除去中间的一个点(或两个点)为左右对称,且为等差数列,所以先求一个等差数列,与y-x比较,差值再与i比较即可

<span style="font-size:18px;">#include <stdio.h>#include <string.h>long long num[50005];void inti(){    for(int i=0;i<50005;i++)       //等差数列        num[i]=i*i+i;}int main(){    int x,y;    inti();    int i;    while(scanf("%d%d",&x,&y)!=-1)    {        int temp=y-x;        for(i=1;temp>=num[i];i++);        int sum=2*(i-1);              //去掉中间一/两个点        if(temp-num[i-1]>i)            sum+=2;        else if(temp-num[i-1]<=i&&temp-num[i-1]>0)            sum+=1;        printf("%d\n",sum);    }    return 0;}</span>


0 0