zoukankan      html  css  js  c++  java
  • 2008 Asia Harbin Regional Contest Online Turn the corner (三分)

    题目来源:

    http://acm.hrbeu.edu.cn/index.php?act=problem&id=1280

    显然我们知道,当左车尾碰到边,前左车到水平的距离h大于 Y,显然是不通过的。 于是我们想求, 这个h到底是多少,我们可以建立h(θ)函数, θ是车与水平的夹角,h(θ)是先增大后减小,为一个凸函数, 恰好最大值为我们需要求的值h.我们用三分的思想做, 即可。

    计算公式为:

    s为车右前到拐角水平线的距离。

    s=cos(θ) * l - x + sin(θ) * d;

    h= tan(θ) *s + d * cos(θ);

    代入h = l* sin(θ) - x * tan(θ) + d/ cos(θ);

    代码如下:

    using namespace std ;
    const double pi= acos(-1);
    const double EPS = 1e-9;
    typedef long long LL ;
    double x, l, d, y;
    double high(double sita){
        return l * sin(sita) - x* tan(sita) + d / cos(sita);
    }
    double tri_search(){
        double l,r,mid,midmid;
        l=0;
        r=pi / 2;
        while(l + EPS < r){
            mid=(l + r)  *0.5;
            midmid= (mid + r) * 0.5;
            if( high(mid) >= high(midmid) )
                r=midmid;
            else l=mid;
        }
        return (l + r)*0.5;
    }
    int main(){
        while(scanf("%lf%lf%lf%lf",&x,&y,&l,&d)!= EOF){
            if(high(tri_search()) >y )
                printf("no
    ");
            else
                puts("yes");
        }
        return 0;
    }
  • 相关阅读:
    CF981D
    CF883H
    Hdu 5884
    全排列
    二叉搜索树实现
    my.ini配置详解
    主元素问题
    排序算法(还需补充)
    迷宫问题(DFS,BFS)
    算法导论4--求最大和数组
  • 原文地址:https://www.cnblogs.com/zn505119020/p/3666343.html
Copyright © 2011-2022 走看看