POJ-2590-Steps题目详解,思路分析及代码,规律题,重要的是找到规律~~
来源:互联网 发布:wtf网络用语是什么意思 编辑:程序博客网 时间:2024/05/05 16:07
http://poj.org/problem?id=2590
Description
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
Output
Sample Input
345 4845 4945 50
Sample Output
334
Source
题目意思很好懂:求x点到y点的最小步数,起始和结束的都只能走一步,中间的可以等于前一步,可以比前一步大一或小一;
我们可以推算出,假设走n步,所能达到的最长距离为:1+2+3+4+...+(n+1)/2+...+4+3+2+1;明白了吧,1 2 3 4 5 ...(n+1)/2... 5 4 3 2 1 ;是不是很熟悉;;
步数(n): 最大距离 f(n)
1 1 f(1)=1;
2 1 + 1 f(2)=2=f(1)+(2+1)/2;
3 1 + 2 + 1 f(3)=4=f(2)+(3+1)/2;
... ... ...
n 1 + 2 + 3 +...+ (n+1)/2 +...+ 3 + 2 +1 f(n)=f(n-1)+(n+1)/2;
这样的话方法就多了,可以把距离与步数的关系打表,然后算出距离差,二分查找即可,但开始我有个疑问,如果这个差值介于f(n)与f(n-1)之间怎么办,我们知道n-1步所能达到的最大距离是f(n-1),如果f(n-1)还比差值小,那么无论如何n-1步都是无法达到的,即只能在n步达到;
这里介绍一种很好的方法,代码简洁易懂,思路都差不多;
#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>using namespace std;int find(int x){ int i,a=1; for(i=2;;i++) { a+=(i+1)/2;//a为i步能达到的最大距离,这样连打表都不用了; if(a>=x) break; } return i;}int main(){ int t,a,b; scanf("%d",&t); while(t--) { scanf("%d%d",&a,&b); if(b-a<=3) printf("%d\n",b-a);//革除了a b 相等的情况; else printf("%d\n",find(b-a)); } return 0;}
- POJ-2590-Steps题目详解,思路分析及代码,规律题,重要的是找到规律~~
- Steps POJ - 2590(数学推导???规律吧!!!)
- 【POJ】1663 - Number Steps(找规律)
- poj 1063 找规律题目
- ZOJ1414 POJ1663 Number Steps 很简单的找规律题
- HDU 1391 Number Steps(思维题目,找规律)
- 这列数的组成规律是
- UVA 864-Steps 数学规律
- Steps——找规律
- 第十七天:poj1019(纯属数学题目,找到规律就能解出)
- poj 1852 Ants <规律题>
- POJ 2229 Sumsets 【规律题】
- Red John Game 规律思路题
- 三道找规律的题
- hdu 2114 找规律的数学题目
- 规律及递归经典题
- 规律!
- 规律
- LightOJ 1236 Pairs Forming LCM【整数分解】
- HDU 1048 The Hardest Problem Ever(字符串处理:getline或gets)
- error: [Errno 111] Connection refused
- java中的缓存
- Android MVC模式
- POJ-2590-Steps题目详解,思路分析及代码,规律题,重要的是找到规律~~
- Qt Widgets——抽象按钮及其继承类
- Android天气预报程序(五)
- SQL Server 2012 恢复数据
- 细数Android Studio中使用junit4测试框架中的坑
- iOS蓝牙4.0(BLE)-开发
- Linux mysql 安装 2
- 在 GitHub 上贡献开源项目的一般步骤
- MySQL,INSERT语句