hiho 1142 三分

来源:互联网 发布:易彩2.0软件下载 编辑:程序博客网 时间:2024/05/20 13:17

在直角坐标系中有一条抛物线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

对于凸函数:先增后减有极大。先减后增有极小。
根据这个按着二分的思路一部部缩小范围即可。

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<set>#include<ctime>#include<queue>#include<cmath>#include<algorithm>#include<vector>#define PI acos(-1.0)using namespace std;typedef long long LL;double a,b,c,x,y;double dis(double X){    return sqrt((a*X*X+b*X+c-y)*(a*X*X+b*X+c-y)+(X-x)*(X-x));}int main(){    scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&x,&y);    double L=-200.0,R=200.0;    while(R-L>1e-5){        double lmid=L+(R-L)/3;        double rmid=R-(R-L)/3;        if(dis(lmid)<dis(rmid)){            R=rmid;        }        else L=lmid;    }    printf("%.3lf\n",dis(R));    return 0;}
0 0
原创粉丝点击