Uva 846 - Steps
Steps |
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 and Output
Input consists of a line containing n, the number of test cases. For each test case, a line follows with two integers: 0x
y < 231. For each test case, print a line giving the minimum number of steps to get from x to y.
Sample Input
3 45 48 45 49 45 50
Sample Output
3 3 4
Miguel Revilla 2002-06-15
#include<stdio.h> #include<string.h> #include<math.h> int main() { int T, start, end, mid, leave, n, temp, sum; scanf("%d", &T); while(T--) { scanf("%d%d", &start, &end); leave = (end-start)%2; mid = (end-start)/2; n = (int)floor(sqrt(2.0*mid)); if(n*(n+1)/2 - mid != 0) { if(n*(n+1)/2 - mid > 0) n--; temp = mid - n*(n+1)/2; sum = 2*n; if(leave) { if(temp*2+1 <= n+1) sum++; else if(temp+1 <= n+1 || temp*2 <= n+1 ) sum += 2; else sum += 3; } else { if(temp*2 <= n+1) sum++; else sum += 2; } } else sum = 2*n+leave; printf("%d\n", sum); } return 0; }
解题报告:
![物役记](https://s2.ax1x.com/2019/05/26/VE5YD0.jpg)
更多内容请关注个人微信公众号 物役记 (微信号:materialchains)
作者:雪影蓝枫
本文版权归作者和博客园共有,欢迎转载,未经作者同意须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。