zoukankan      html  css  js  c++  java
  • 三分查找——ZOJ3203

    随着人的移动,求影子长短的变化,求最长

    先写凸函数,注意是分段函数

    double temp=h*1.0/H*d;
    double y;
    if(x<temp)
    y=(x*H-h*d)/(-d+x)+x;
    else
    y=(d-x)*h*1.0/H;

    三分模板一套就0了

    View Code
    #include<stdio.h>

    double ll,rr,mid,midmid,H,h,d;

    double fun(double x)
    {
    double temp=h*1.0/H*d;
    double y;
    if(x<temp)
    y=(x*H-h*d)/(-d+x)+x;
    else
    y=(d-x)*h*1.0/H;
    return y;
    }

    int main()
    {

    int n;
    scanf("%d",&n);
    while(n--)
    {

    scanf("%lf%lf%lf",&H,&h,&d);
    ll=0;
    rr=d;
    while(ll+0.000001<rr)
    {
    mid=(ll+rr)/2.0;
    midmid=(mid+rr)/2.0;
    if(fun(mid)>=fun(midmid))
    {
    rr=midmid;
    }
    else
    ll=mid;
    }

    printf("%.3lf\n",fun(ll));
    }
    }



  • 相关阅读:
    Go Map
    Go XORM
    Go切片
    Go函数
    dockerfile常用指令
    Goroutine并发控制
    Go 格式转换
    Go 常用知识点及实例
    Go 时间
    Go error
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2316586.html
Copyright © 2011-2022 走看看