#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
code
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 5 using namespace std; 6 7 const double eps = 1e-6; 8 double a,b,c,x,y; 9 10 double dist(double z) { 11 return sqrt( (x-z)*(x-z) + (a*z*z+b*z+c-y)*(a*z*z+b*z+c-y) ); 12 } 13 int main () { 14 scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&x,&y); 15 double L = -1000,R = 1000; 16 while (R - L >= eps) { 17 double lmid = (L + R) / 2.0; 18 double rmid = (lmid + R) / 2.0; 19 if (dist(lmid) <= dist(rmid)) R = rmid; 20 else L = lmid; 21 } 22 printf("%.3lf",dist(L)); 23 return 0; 24 }