中文题面,原函数为三峰函数,先折半再三分
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+11;
const int oo = 0x3f3f3f3f;
int a,b,c,x,y;
double C(double X){
double Y=(double)a*X*X+b*X+c;
return (X-x)*(X-x)+(Y-y)*(Y-y);
}
int main(){
while(cin>>a>>b>>c>>x>>y){
double l=-b/2/a,r=1e3;
while(r-l>1e-4){
double lm=l+(r-l)/3;
double rm=r-(r-l)/3;
if(C(lm)<C(rm)){
r=rm;
}else{
l=lm;
}
}
double ans=C(l);
l=-1e3,r=-b/2/a;
while(r-l>1e-4){
double lm=l+(r-l)/3;
double rm=r-(r-l)/3;
if(C(lm)<C(rm)){
r=rm;
}else{
l=lm;
}
}
ans=min(C(l),ans);
printf("%.3lf\n",sqrt(ans));
}
return 0;
}