zoukankan      html  css  js  c++  java
  • HihoCoder 1142 三分·三分求极值

    1142 : 三分·三分求极值

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    这一次我们就简单一点了,题目在此:

    在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的最短距离d。

    提示:三分法

    输入

    第1行:5个整数a,b,c,x,y。前三个数构成抛物线的参数,后两个数x,y表示P点坐标。-200≤a,b,c,x,y≤200

    输出

    第1行:1个实数d,保留3位小数(四舍五入)

    样例输入
    2 8 2 -2 6
    样例输出
    2.437

    虽然由题目知道三分能得到答案,但是为什么是距离d与x的关系为什么是凹函数?QwQ

    另外,是要求距离满足1e-3的精度,我x轴精确到1e-3的情况下肯定满足距离的精度更高。

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    using namespace std;
    int main()
    {
        double L,R,a,b,c,x,y,x1,x2,y1,y2,d1,d2;
        cin>>a>>b>>c>>x>>y;
        L=-400;
        R=400;
        while(R-L>1e-3){ 
            x1=L+(R-L)/3;
            x2=R-(R-L)/3;
            y1=a*x1*x1+b*x1+c;
            y2=a*x2*x2+b*x2+c;
            d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);
            d2=(x-x2)*(x-x2)+(y-y2)*(y-y2);
            if(d1>=d2) L=L+(R-L)/3;
            else R=R-(R-L)/3;
        }
        x1=L+(R-L)/3;
        y1=a*x1*x1+b*x1+c;
        d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
        printf("%.3lf
    ",d1);
        return 0;
    }
  • 相关阅读:
    Linux的学习--系统目录
    PHP内核的学习--创建PHP扩展
    PHP的学习--连接MySQL的三种方式
    MIME Type
    颜色的命名
    JavaScript的学习--生成二维码
    MySQL的学习--触发器
    Google Guava之--cache
    java代码调用oracle存储过程
    oracle序列
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7792756.html
Copyright © 2011-2022 走看看