当前位置: 代码迷 >> 综合 >> poj 1650 Integer Approximation “追赶法”搜索
  详细解决方案

poj 1650 Integer Approximation “追赶法”搜索

热度:0   发布时间:2024-01-19 05:27:59.0

题意:

给a,l,求n,d<=l,使|a-n/d|最小。

分析:

两个需要枚举的变量,由于两个变量有依赖关系,可采取“追赶法”,能在O(n)时间解决问题。

代码:

//poj 1650
//sep9
#include <iostream>
#include <cmath>
using namespace std;int main()
{int n,d,ansn,ansd,l;double a,minx,now,tmp;while(scanf("%lf%d",&a,&l)==2){n=1,d=1,minx=9999999.9;while(n<=l&&d<=l){double p=a-(double)n/d;tmp=fabs(p);if(tmp<minx){minx=tmp;ansn=n,ansd=d;}if(p<=0)++d;else++n;}	printf("%d %d\n",ansn,ansd);	}return 0;	
} 


  相关解决方案