hihoCoder 1142 三分求極值

2021-09-22 13:11:48 字數 1415 閱讀 9340

時間限制:

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
【思路】二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。但當函式是凸形函式時,二分法就無法適用,這時就需要用到三分法。

從三分法的名字中我們可以猜到,三分法是對於需要逼近的區間做三等分:

我們發現lm這個點比rm要低,那麼我們要找的最小點一定在[left,rm]之間。如果最低點在[rm,right]之間,就會出現在rm左右都有比他低的點,這顯然是不可能的。 同理,當rm比lm低時,最低點一定在[lm,right]的區間內。利用這個性質,我們就可以在縮小區間的同時向目標點逼近,從而得到極值。

接下來我們回到題目上,拋物線和點之間的距離可以簡單的用直線公式計算:即d = min該公式展開後為4次,需要採用求導等方法來求極值。對於計算機程式設計來說是很麻煩的一件事。

進一步觀察題目,我們可以發現根據帶入的x值不同,d的長度恰好滿足凸形函式。而我們要求的最短距離d,正好就是這個凸形函式的極值。那麼三分法不就正好可以用來解決這道題目了麼?需要注意在解題過程中一定要想清楚如何劃分區間,我們求的各個變數到底是什麼含義。

下面給出ac**:

1 #include 2

using

namespace

std;

3double

a,b,c;

4const

double eps=1e-4;5

const

double minn=-200;6

const

double maxn=200;7

double

x,y;

8double solve(doublex)9

12int

main()

1325 printf("

%.3lf\n

",solve(l));26}

27return0;

28 }

hihoCoder 1142 三分求極值

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述這一次我們就簡單一點了,題目在此 在直角座標系中有一條拋物線y ax 2 bx c和乙個點p x,y 求點p到拋物線的最短距離d。輸入第1行 5個整數a,b,c,x,y。前三個數構成拋物線的引數,後兩個數x,y表示p點座標...

三分 三分求極值 HihoCoder 1142

描述 在之前的幾周中我們了解到二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。但當函式是凸形函式時,二分法就無法適用,這時就需要用到三分法。從三分法的名字中我們可以猜到,三分法是對於需要逼近的區間做三等分 week40 2.png 我們發現lm這個點比rm要低,那麼我們要找的最小點一...

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位小數 四捨五入 ...