hihocoder 1142 三分·三分求极值(三分)

题目1 : 三分·三分求极值

时间限制: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

简单三分

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5 double a,b,c,x,y;
 6 double scla(double xx)
 7 {
 8     double yy;
 9     yy = a*xx*xx+b*xx+c;
10     return sqrt((xx-x)*(xx-x) + (yy-y)*(yy-y));
11 }
12 double thfind(double left,double right)
13 {
14     double midmid,mid;
15     while(left + 1e-10 < right)
16     {
17         mid = (left + right)/2;
18         midmid = (mid+right)/2;
19         if(scla(mid) < scla(midmid))
20             right = midmid;
21         else
22             left = mid;
23     }
24     return scla(left);
25 }
26 int main(void)
27 {
28     scanf("%lf %lf %lf %lf %lf",&a,&b,&c,&x,&y);
29     printf("%.3lf
",thfind(-200,200));
30     return 0;
31 }
原文地址:https://www.cnblogs.com/henserlinda/p/4736938.html