日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu3400 两重三分

發布時間:2025/6/17 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu3400 两重三分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ?題意給你兩個公路 A-B C-D 和三個速度V(ab) V(cd) 和 V(兩條公路之間) 問你從A到D的最短時間是多少.


思路:
? ?一開始暴力了其中的一條邊,每次加0.01,另一條邊用的三分,結果wa掉了,感覺不wa暴力一條邊時間上也夠嗆,后來看了下題解,人家用的是兩重三分,就是三分其中一條邊,當對于最外層的那個三分的某兩個點也就是 mid mmid,我們在三分兩次,取得最優,
確實如此,因為后來想了想,對于整體來說,總函數里面有兩個未知數,無法確定是他的性質,

但是如果我們分開來想,分成兩部分,那么他們就含有凸性(或凹性)了,這樣我們就可以三分在短時間內找到精度滿足條件的解..


#include<stdio.h> #include<math.h>#define eps 0.0001 typedef struct {double x ,y; }NODE;NODE A ,B ,C ,D; double P ,Q ,R;double dis(NODE X ,NODE Y) {double tmp = pow(X.x - Y.x ,2.0) + pow(X.y - Y.y ,2.0);return sqrt(tmp); }double CD_3F(NODE now) {NODE low ,up ,mid ,mmid;double t1 ,t2;low = C ,up = D;while(1){mid.x = (low.x + up.x) / 2;mid.y = (low.y + up.y) / 2;t1 = dis(now ,mid) / R + dis(mid ,D) / Q;mmid.x = (mid.x + up.x) / 2;mmid.y = (mid.y + up.y) / 2;t2 = dis(now ,mmid) / R + dis(mmid ,D) / Q;if(t1 > t2) low = mid;else up = mmid;if(dis(low ,up) < eps) break;}return t2; }double AB_3F() {NODE low ,up ,mid ,mmid;low = A ,up = B;double t1 ,t2;while(1){ //puts("ok"); mid.x = (low.x + up.x) / 2;mid.y = (low.y + up.y) / 2;t1 = dis(A ,mid) / P + CD_3F(mid);mmid.x = (mid.x + up.x) / 2;mmid.y = (mid.y + up.y) / 2;t2 = dis(A ,mmid) / P + CD_3F(mmid);if(t1 > t2) low = mid;else up = mmid;if(dis(low ,up) < eps) break;}return t1; }int main () {int t;scanf("%d" ,&t); while(t--){scanf("%lf %lf %lf %lf" ,&A.x ,&A.y ,&B.x ,&B.y);scanf("%lf %lf %lf %lf" ,&C.x ,&C.y ,&D.x ,&D.y);scanf("%lf %lf %lf" ,&P ,&Q ,&R);printf("%.2lf\n" ,AB_3F());}return 0; }

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的hdu3400 两重三分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。