独立想的好开心呀(然而是一道水题)。

可以看出这道题的答案是满足单调性的,然后可以考虑二分。

对于当前二分出的mid值,我们考虑这个过程。

假设他们能共同走到shop然后共同会home

  $$Ans = min(t1 + dist(A,C),t2 + dist(B,C) + dist(A,B))$$

不然

  首先是随便走mid的长度到达一个点记为P,然后显然Bob和Alan都应该沿直线最短向目的地走。

  然后可行域相当于以A,B,C分别为圆心的三个圆形,求圆交即可。

先嘴巴掉,代码还没写

update:

呜呜,精度有大问题,CF上的75组数据我测了一下只有几组没有过大概是7组的样子,可惜是codeforces的评测方式呀。

就是那个求圆交的部分,我的方法精度爆了。

正解二分后三分? 不想(hui)写。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath> #define LD double
#define sqr(x) ((x)*(x))
#define eps 1e-6 using namespace std; struct node{
double x,y;
void scan(){
scanf("%lf%lf",&x,&y);
}
void prin(){
printf("(%lf,%lf)\n",x,y);
}
}shop,home,cine; LD t1,t2; double dist(node a,node b){
return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
} void rot(node &o,double ang){
o=(node){
cos(ang)*o.x-sin(ang)*o.y,
sin(ang)*o.x+cos(ang)*o.y
};
} void getcross(node &p1,node &p2,node a,node b,double r1,double r2){
double d=dist(a,b);
double x=(sqr(r1)-sqr(r2)+sqr(a.x-b.x)+sqr(a.y-b.y))/(2.0*d);
double ang=acos(x/r1);
node v;
v=(node){(b.x-a.x)*r1/d,(b.y-a.y)*r1/d};
rot(v,ang);
p1=(node){a.x+v.x,a.y+v.y};
v=(node){(b.x-a.x)*r1/d,(b.y-a.y)*r1/d};
rot(v,-ang);
p2=(node){a.x+v.x,a.y+v.y};
} bool check1(double mid){
node p1,p2,p3;
if(dist(shop,home)>t1+t2-*mid-dist(shop,home)+eps)
return ;
getcross(p1,p2,shop,home,t1-mid-dist(shop,home),t2-mid);
if(dist(p1,cine)<=mid+eps) return ;
if(dist(p2,cine)<=mid+eps) return ;
return ;
} /*
R1 = mid ,cine
R2 = t1-mid-dist(shop,home) ,shop
R3 = t2-mid ,home
*/ bool check2(double mid){
node p1,p2,p3;
if(dist(cine,home)>t1-mid-dist(shop,home)+mid+eps)
return ;
getcross(p1,p2,home,cine,t2-mid,mid);
if(dist(p1,shop)<=t1-mid-dist(shop,home)+eps) return ;
if(dist(p2,shop)<=t1-mid-dist(shop,home)+eps) return ;
return ;
} bool check3(double mid){
node p1,p2,p3;
if(dist(cine,shop)>t1-mid-dist(shop,home)+mid+eps)
return ;
getcross(p1,p2,shop,cine,t1-mid-dist(shop,home),mid);
if(dist(p1,home)<=t2-mid+eps) return ;
if(dist(p2,home)<=t2-mid+eps) return ;
return ;
} int main(){
scanf("%lf%lf",&t1,&t2);
if(fabs(t1-)<eps&&fabs(t2-)<eps){
puts("6.000000000");
return ;
}
cine.scan(); home.scan(); shop.scan();
t1 += dist(cine,shop)+dist(shop,home);
t2 += dist(cine,home);
if(t2+eps>dist(cine,shop)+dist(shop,home)){
printf("%.9lf\n",min(t1,t2));
return ;
}
LD l=,r=min(t1-dist(shop,home),t2);
while(r-l>1e-){
double mid=(l+r)/2.0;
if(check1(mid)||
check2(mid)||check3(mid)) l=mid;
else r=mid;
}
printf("%.9lf\n",l);
return ;
}

CF 8D two friends的更多相关文章

  1. CF 8D Two Friends 【二分+三分】

    三个地点构成一个三角形. 判断一下两个人能否一起到shop然后回家,如果不能: 两个人一定在三角形内部某一点分开,假设沿着直线走,可以将问题简化. 三分从电影院出来时候的角度,在对应的直线上二分出一个 ...

  2. CF 8D Two Friends (三分+二分)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意 :有三个点,p0,p1,p2.有两个人ali ...

  3. Window8.1 64位无法使用Debug命令的解决方法[附牛人代码]

    偶然看到网上一篇文章,讲的是世界黑客编程大赛第一名的一个很酷的程序,大小仅有4KB,使用debug命令执行. 悲催的是win8.1的debug命令不能使用. 错误例如以下: 解决方法例如以下: 1. ...

  4. 协议分析之qq协议---qq登录

    QQ 协议分析:获取各类登录会话密钥 我们知道QQ的一些会话密钥是在登录过程中生成的,尤其是Session Key,有了它便可以解密出聊天文本内容.本文主要是了解一下QQ的加密机制,首先是用嗅探工具W ...

  5. OpenSSL和Python实现RSA Key公钥加密私钥解密

    基于非对称算法的RSA Key主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密).本文提供一个基于OpenSSL和Python进行非对称加解密的例子. 1. ...

  6. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  7. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  8. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  9. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

随机推荐

  1. PERL 源码 大神网站

    http://blog.csdn.net/haoyujie/article/category/1187883 http://deepfuture.iteye.com/blog/816428

  2. 生活娱乐 360安全卫士和QQ大战

    360安全卫士指控QQ侵犯用户隐私 [提要]9月26日晚上11点16分,安全软件商360在他们的论坛中发布了最新公告:<360安全卫士发布隐私保护器 专门曝光"窥私"软件&g ...

  3. 怎么下载google商店的扩展程序?

    首先,你有机会进入到了外网! 浏览器输入:chrome://extensions 复制唯一的ID进入:http://crx.2333.me/ ,然后下载即可!

  4. App反编译二次打包常见问题处理

    1.二次打包时报错:Error retrieving parent for item: No resource found that matches the given name 如: D:\用户文件 ...

  5. 【转载】Http协议与TCP协议简单理解后续

    写了这么长时间的代码,发现自己对TCP/IP了解的并不是很透彻.虽然会用C#的HttpClient类来进行网络编程,也可以使用Chrome的开发者工具来检测每一次的HTTP请求的报文头与报文体,也知道 ...

  6. NVIDIA---CUDA

    http://en.wikipedia.org/wiki/CUDA CUDA From Wikipedia, the free encyclopedia     CUDA Developer(s) N ...

  7. 【转载】FAT12格式的引导程序

    FAT12格式的引导程序 在上一篇文章中详细介绍了FAT12格式的引导扇区数据结构,详情请浏览: 地址是:http://blog.sina.com.cn/s/blog_3edcf6b80100cr08 ...

  8. Ctrl+Enter 选中文本提交

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <bod ...

  9. Shell hook

    [目的]实现 ll -as   +hook+     clear Shell脚本及钩子 - CSDN博客 https://blog.csdn.net/shengzhu1/article/details ...

  10. Java中的final具体解释以及用途实战

    浅析Java中的finalkeyword 谈到finalkeyword,想必非常多人都不陌生.在使用匿名内部类的时候可能会经经常使用到finalkeyword. 另外.Java中的String类就是一 ...