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位小数(四舍五入)

样例输入
2 8 2 -2 6
样例输出
2.437

思路:三分裸题。注意一下变量类型。


 1 #include<cstdio>
 2 #include<cmath>
 3 using namespace std;
 4 int a,b,c,x_0,y_0;
 5 
 6 double f(double x){
 7     return a*x*x+b*x+c;
 8 }
 9 double disc(double x){
10     return sqrt((x-x_0)*(x-x_0)+(f(x)-y_0)*(f(x)-y_0));
11 }
12 
13 int main(){
14     int x,y,dis;
15     double lm,rm,temp;
16     double l=-100000,r=100000;
17     scanf("%d%d%d%d%d",&a,&b,&c,&x_0,&y_0);
18     while(r-l>=0.001){
19         temp=(r-l)/3.0;
20         lm=l+temp;
21         rm=r-temp;
22         if(disc(lm)>disc(rm)) l=lm;
23           else r=rm;        
24     }
25     
26       printf("%.3f
",disc(l));
27           
28     return 0;
29 } 
原文地址:https://www.cnblogs.com/yzhhh/p/10048905.html