HihoCoder 1142-三分求極值(三分模板)
阿新 • • 發佈:2018-12-01
描述
這一次我們就簡單一點了,題目在此:
在直角座標系中有一條拋物線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> 3using 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 }