首页 > 其他 > 详细

HDU 2675 Equation Again

时间:2015-10-09 19:38:41      阅读:268      评论:0      收藏:0      [点我收藏+]

公式转化+二分答案

首先,把题目中给的等式转化一下,变成了技术分享这个样子。

等式右边的值是可以求出来的。

ln(x)/x的大致图像是这样的技术分享

 

那么只要对[0,e]和[e,+∞]分别进行二分答案即可。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

double Y,k;
const double e=2.71828182845904523536;

int main()
{
    while(~scanf("%lf",&Y))
    {
        k=(1+log(Y))/(e*Y);
        int flag=0;
        double l=0,r=e;
        double mid=(l+r)/2;
        if(k>1.0/e) {
            printf("Happy to Women’s day!\n");
            continue;
        }
        if(Y==1)
        {
            printf("2.71828\n");continue;
        }
        while(1)
        {
            if(fabs(log(mid)/mid-k)<0.000000000001) 
            {
                flag=1;
                printf("%.5lf ",mid);
                break;
            }
            if(log(mid)/mid>k)
            {
                r=mid;
                mid=(l+r)/2;
            }
            else
            {
                l=mid;
                mid=(l+r)/2;
            }
            if(fabs(l-r)<0.000000000001) break;
        }

        l=e,r=5000;
        mid=(l+r)/2;

        while(1)
        {
            if(fabs(log(mid)/mid-k)<0.00000000001) 
            {
                flag=1;
                printf("%.5lf\n",mid);break;
            }
            if(log(mid)/mid<k)
            {
                r=mid;
                mid=(l+r)/2;
            }
            else
            {
                l=mid;
                mid=(l+r)/2;
            }
            if(fabs(l-r)<0.000000000001) break;
        }
        if(!flag) printf("Happy to Women’s day!\n");
    }
    return 0;
}

 

HDU 2675 Equation Again

原文:http://www.cnblogs.com/zufezzt/p/4864760.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!