码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ Problem Set - 3203 Light Bulb 【三分法】

时间:2014-10-27 10:59:13      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:c++   algorithm   优化   搜索   三分法   

题目:ZOJ Problem Set - 3203 Light Bulb 


题意:bubuko.com,布布扣

如图,有个人在地上走,然后他的影子可以投影到墙上或者地上,问影子最长是多少?


分析:

我们知道,三分法是解决一个凹或凸函数的极大极小值,发现这个影子从刚好投影到右下角开始便是一个凸函数,他的影子长度是先递增后递减的,所以可以用三分法。

三分法的原理:

bubuko.com,布布扣


AC代码:

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
#include <iostream>

using namespace std;
#define Del(a,b) memset(a,b,sizeof(a))
typedef long long LL;
double H,h,d;
double solve(double x)
{
    return  d - x + H - d*(H-h)/x;  //地上+墙上
}
//三分法
double Yougth(double l,double r)
{
    while(l+1e-10<r)
    {
        double mid = (l + r)/2;
        double midmid = (mid + r)/2;
        if(solve(mid) - solve(midmid)<0)
            l = mid;
        else
            r = midmid;
    }
    return l;
}
int main()
{
    //freopen("Input.txt","r",stdin);
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lf%lf%lf",&H,&h,&d);
        double cs = Yougth(d - d*h/H,d);
        printf("%.3lf\n",solve(cs));
    }
    return 0;
}



ZOJ Problem Set - 3203 Light Bulb 【三分法】

标签:c++   algorithm   优化   搜索   三分法   

原文地址:http://blog.csdn.net/y990041769/article/details/40503431

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!