• 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;
    }
  • 相关阅读:
    个人信息
    两个整数的最小公倍数和最大公约数
    java杨辉三角实现
    只会用这简单的递归求阶乘
    图形界面设计
    圆的面积,周长,圆柱体的体积(类的封装与抽象)
    杨辉三角
    1~10的阶乘java语言编程
    个人信息与计算器
    个人信息显示界面
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7792756.html
Copyright © 2020-2023  润新知