HDU3400 Line belt (幾何+三分)
題目連結:
http://acm.hdu.edu.cn/showproblem.php?pid=3400
題意:
給定兩條平行的路的左右端點的座標。然後給定三個速度求表示在分別在兩條路上的速度和不在路上走的速度
求從點A走到點D的最短時間。
分析:
先假定一個點固定的話 那麼中間肯定有一個點可以使時間最小 然後是一個下凸型函式,
我們可以用三分來求。但是本題的兩個點都不固定,那麼思考一下 我們就可以嘗試用
兩個三分來做,一個三分求一條路上的點,另一個求另外一條路上的點。
注意求距離開方的時候會有精度損失。
程式碼如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const double eps = 1e-7;
const double ee = 1e-9;
double p,q,r;
struct point{
double x,y;
};
point a,b,c,d,tmp1,tmp2;
double dis(point a,point b)
{
return sqrt(ee+(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double calu(double t)
{
tmp2.x=d.x+(c.x-d.x)/dis(c,d)*t*q;
tmp2.y=d.y+(c.y-d.y)/dis(c,d)*t*q;
return t + dis(tmp1,tmp2)/r;
}
double sanfen(double t)
{
tmp1.x=a.x+(b.x-a.x)/dis(a,b)*t*p;
tmp1.y=a.y+(b.y-a.y)/dis(a,b)*t*p;
double low=0,high=dis(c,d)/p,ll,rr;
while(high-low>eps){
ll=(low*2+high)/3;
rr=(low+high*2)/3;
if(calu(ll)<calu(rr)) high=rr;
else low=ll;
}
return t+calu(ll);
}
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);
double low = 0, high = dis(a,b)/p,ll,rr;
while(high-low>eps){
ll=(low*2+high)/3;
rr=(low+high*2)/3;
if(sanfen(ll)<sanfen(rr)) high=rr;
else low = ll;
}
printf("%.2lf\n",sanfen(ll));
}
return 0;
}
相關文章
- HDU 3400 Line belt
- SGU 124 Broken line(計算幾何)
- 平面幾何
- 計算幾何
- 計算幾何 —— 二維幾何基礎 —— 距離度量方法
- 計算幾何模板
- 計算幾何:模板
- 說下line-height三種賦值方式有何區別?賦值
- Something about 計算幾何
- 異構幾何問題
- [筆記] 計算幾何筆記
- 幾何本質初步猜想
- HDU 6055 Regular polygon(幾何)Go
- 寵物醫療,成色幾何?
- 論 DevOps 實踐有幾何?dev
- 幾何庫從零開始
- three.js 幾何體(三)JS
- three.js 幾何體(二)JS
- SGU 110 Dungeon(立體幾何)
- geogebra幾何畫圖工具用法
- eslint-disable-next-line to ignore the next lineEsLint
- 什麼是 幾何複雜性
- 幾何約束求解思維框架框架
- 計算幾何——平面最近點對
- 【學習筆記】計算幾何筆記
- 齊次座標與投影幾何
- 數學趣題:平面幾何(一)
- POJ - 1556 【計算幾何 + 最短路】
- 數學趣題:平面幾何(二)
- WebGL:使用著色器進行幾何造型Web
- 俄羅斯總理的幾何題
- Tkinter (46) 佈局幾何管理器
- CityEngine函式庫1-幾何建立函式
- 幾何線婚慶門戶系統
- 幾何畫板中文免費版5.06
- 百度造車,勝算幾何?
- BNUOJ 12887 isumi(計算幾何+最大流)
- SGU 120 SGU 228 Archipelago(計算幾何)Go
- 深度學習和幾何(演講提要)深度學習