您的位置:首页 > 大数据 > 人工智能

二分搜索 HDOJ 2675 Equation Again

2015-07-25 18:23 525 查看
题目传送门

 /*
二分搜索:式子两边取对数,将x提出来,那么另一边就是一个常数了,函数是:lnx/x。二分搜索x,注意要两次
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

const double e = exp (1.0);

double cal(double x) {
return log (x) / x;
}

int main(void)  {       //HDOJ 2675 Equation Again
//freopen ("HDOJ_2675.in", "r", stdin);

double y, k;
while (scanf ("%lf", &y) == 1)  {
k = (1 + log (y)) / (e * y);
//if (k > 1 / e)  {                 //囧!
//    puts ("Happy to Women’s day!");    continue;
//}
if (k == 1 / e) {
printf ("%.5f\n", e); continue;
}

double x1, x2;
double l = 0, r = e;
for (int i=1; i<=100; ++i)  {
double mid = (l + r) / 2;
if (cal (mid) >= k)   r = mid;
else    l = mid;
}
x1 = l;
l = e, r = 1e9;
for (int i=1; i<=100; ++i)  {
double mid = (l + r) / 2;
if (cal (mid) >= k)   l = mid;
else    r = mid;
}
x2 = l;
printf ("%.5f %.5f\n", x1, x2);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: