hihocoder #1142 : 三分·三分求极值

时间:2023-03-09 23:03:35
hihocoder #1142 : 三分·三分求极值
时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

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

hihocoder #1142 : 三分·三分求极值

在直角坐标系中有一条抛物线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位小数(四舍五入)

题解:

三分法板子题,我们可以明显看出P(x,y)到抛物线距离是个凸函数,所以存在极值

 #include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#define RG register
#define il inline
using namespace std;
const double eps=1e-;
double a,b,c,x,y;
double f(double i){
double j=a*i*i+b*i+c;
return sqrt((x-i)*(x-i)+(y-j)*(y-j));
}
void work()
{
double l=-10000.0,r=10000.0,lmid,rmid;
while(l<r-eps){
lmid=l+(r-l)/;rmid=r-(r-l)/;
if(f(lmid)<f(rmid))r=rmid;
else l=lmid;
}
printf("%.3lf\n",f(l));
} int main()
{
while(cin>>a>>b>>c>>x>>y)
work();
return ;
}