[SCOI2010]传送带

LG传送门

三分法模板。

关于为什么可以三分,我选择感性理解,有人证明了,总之我是懒得证了。

假设路径是\(A \to E \to F \to D\),\(E\)和\(F\)分别是从\(AB\)到平面上的拐角和从平面上到\(CD\)上的拐角。首先三分\(E\)的位置,在此基础上三分\(F\)的位置就可以了。

#include<cstdio>
#include<cmath>
#define I inline
#define D double
using namespace std;
const D eps=1e-6;
struct N{D x,y;}a,b,c,d;
D P,Q,R;
I D pwr(D x){return x*x;}
I D dst(N a,N b){return sqrt(pwr(a.x-b.x)+pwr(a.y-b.y));}
D dac0(N f){
N l=c,r=d,p,q;
D u,v,o,e;
while(dst(l,r)>eps)
u=(r.x-l.x)/3,v=(r.y-l.y)/3,p=(N){l.x+u,l.y+v},q=(N){r.x-u,r.y-v},o=dst(f,p)/R+dst(p,d)/Q,e=dst(f,q)/R+dst(q,d)/Q,e-o>eps?r=q:l=p;
return dst(f,l)/R+dst(l,d)/Q;
}
D dac(){
N l=a,r=b,p,q;
D u,v,o,e;
while(dst(l,r)>eps)
u=(r.x-l.x)/3,v=(r.y-l.y)/3,p=(N){l.x+u,l.y+v},q=(N){r.x-u,r.y-v},o=dst(a,p)/P+dac0(p),e=dst(a,q)/P+dac0(q),e-o>eps?r=q:l=p;
return dac0(l)+dst(a,l)/P;
}
int main(){
scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y,&P,&Q,&R);
printf("%.2lf",dac());
return 0;
}

最新文章

  1. requirejs使用
  2. Debian 7(Linux) 安装SSH使用SecureCRT连接配置
  3. mac上安装opencv3
  4. csharp: Export or Import excel using NPOI
  5. 问题-在TreeView使用时,发现选中的树节点会闪烁或消失
  6. IOS 学习笔记 2015-04-15 控制器数据反向传值
  7. WPF自定义窗体仿新毒霸关闭特效(只能在自定义窗体中正常使用)
  8. 快速排序算法之我见(附上C代码)
  9. .net winForm 实现类似qq 弹出新闻
  10. git 本地给远程仓库创建分支 三步法
  11. Stack-overflow, how to answer
  12. JDBC底层原理
  13. html5 contenteditable 实现table可编辑(网页版EXCEL)
  14. jarvisoj level5爬坑
  15. Custom Window
  16. 浅谈前端JavaScript编程风格
  17. CUDA ---- Warp解析
  18. 2017-2018-2 20155309南皓芯 Exp8 WEB基础实践
  19. Opencv Mat运算(转)
  20. python 读csv数据 通过改变分隔符去掉引号

热门文章

  1. USMT
  2. PowerShell管理SCOM_批量设置维护模式(下)
  3. jQuery插件实例二:年华时代插件ReturnTop回到首页
  4. 字符串到--&gt;list到--&gt;字典的转变
  5. SGU---105 水题
  6. Linux进程地址空间与虚拟内存
  7. MySql+Memcached架构的问题
  8. 将项目发布到Maven中央仓库的不完整纪要
  9. 【node.js】Express 框架
  10. java.lang.NoClassDefFoundError: org/apache/ibatis/mapping/DatabaseIdProvider