1. 程式人生 > >HihoCoder 1142-三分求極值(三分模板)

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\n",disc(l)); 27 28 return 0; 29 }