HDU 3400 Line belt 三分套娃

2022-07-23 20:30:28 字數 1471 閱讀 7375

我們假定在\(a, b\)上選取點\(e\),在\(c, d\)上選取點\(f\),我們的移動路徑是\(a -> e -> f -> d\)。

當我們確定\(e\)點時,不難發現\(dis(e -> f + f -> d)\)是乙個凹函式,具有極小值。

當我們確定\(f\)點時不難發現\(dis(a -> e + e -> f)\)也是乙個凹函式,具有極小值。

這兩段函式連線起來,不難發現也是乙個凹函式,具有極小值。

這就好像是乙個套娃的三分了,我們可以通過確定\(e\)點,然後去找到\(min\ dis(e -> f + f -> d)\)

然後由於函式具有整體的凹性,我們只要通過基礎的三分來三分點\(e\),就能確定最後的答案。

具體有一些細節在**中。

#include using namespace std;

const double eps = 1e-6;

double p, q, r;

struct point ;

}a, b, c, d, e, f;

double dis(point a, point b)

double calc2(double x)

double calc1(double x)

//calc2 + cost(a -> e)。

return calc2(l) + (x / p);

}int main()

// cout << l << " " << r << endl;

printf("%.2f\n", calc1(l));

// puts("");

}return 0;

}

8

0 0 4 1

4 1 0 2

8 8 1

0 0 0 100

100 0 100 100

2 2 1

8 0 23 8

4 2 91 0

4 9 10

0 0 2 2

0 2 2 0

4 3 1

1 8 1000 10

0 689 10 1000

90 1 20

4 9 4 20

4 41 4 60

4 4 1

4 9 4 20

4 91 4 60

4 3 1

0 5 8 5

2 5 4 0

6 9 3

1.03

136.60

8.30

0.83

49.60

28.50

42.75

0.93

hdu 3400 Line belt 三分套三分)

題意 在乙個二維空間中給出兩條線段ab,cd,線段ab,cd上的運動速度分別為p,q。在這兩條線段之外的空間上運動的速度為r。求從a到d的最短時間。思路 ps 在這種求解方法中,中間運用了比較多的除法,導致精度損失,所以再開方前加乙個eps,防止開方後的值比真實值小。include include ...

HDU3400 Line belt 三分法 C語言

題目 題目大意 給出a b c d四點座標,在ab上速度為p,cd上速度為q,其他地方速度為r。求從a到d的最短時間 思路 兩個三分巢狀,ab線段三分,內層巢狀cd線段內的三分 提交情況 wa 1次,ac 1次 總結 內層的三分時,每次都要重新賦兩端點的值為c d的值,因為前一次搜尋結束後,端點值已...

hdu 3400 悲劇的三分

題意 就是給你兩條線段ab cd 乙個人在ab上跑速度p,在cd上跑q,在其他地方跑速度是r。問你從a到d最少的時間是好多。解法。比賽時候看題就想起之前hs教我的三分,結果寫了全場的,都沒有過的。哎太挫了。正確解法就是 對ab上三分乙個e點,在cd上三分乙個點f,然後三分完了之後就是最後的結果了的。...