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

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

对于当前二分出的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. JSONKit升级XCODE后报一堆警告解决办法

    虽然我已经该用apple自己的json解析了,但是对于需要兼容低版本的,还是需要用第三方的, 目前用的最多的就有JSONKit了,包括微博sdk,但是一编译报一堆警告,看着很不爽.可以自己手动一个个修 ...

  2. Python爬虫简单实现之Q乐园图片下载

    根据需求写代码实现.然而跟我并没有什么关系,我只是打开电脑望着屏幕想着去干点什么,于是有了这个所谓的“需求”. 终于,我发现了Q乐园——到底是我老了还是我小了,这是什么神奇的网站,没听过啊,就是下面酱 ...

  3. CCPhysicsSprite

    #ifndef __PHYSICSNODES_CCPHYSICSSPRITE_H__ #define __PHYSICSNODES_CCPHYSICSSPRITE_H__ #include " ...

  4. FLEX接收外部参数 .

    FLEX参数传递与FLASH有点不同 login..swf?name=aa&password=bb Flex上是这样接收参数的 myname=mx.core.Application.appli ...

  5. iOS 小动画

    一.图片旋转 CABasicAnimation* rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPa ...

  6. Javascript中没有引用传递,只有按值传递

    很多人,包括我,受书本知识消化不彻底的影响,认为 JS 中参数有两种传递方式:数字.字符串等按值传递:数组.对象等按地址(引用)传递.对此种观点,我们要谨慎. var v1 = [] var v2 = ...

  7. centos下部署项目问题

    最近写了商品管理的后台完成了一部分,用node+koa+mongodb搭建,现在想部署到自己的服务器上,部署的过程中遇到了一些坑.首先就是各种环境的搭建,搭建好了之后要把后台的代码传到服务器上运行,运 ...

  8. Python调用C/Fortran混合的动态链接库--上篇

    内容描述: 在32位或64位的windows或GNU/Linux系统下利用Python的ctypes和numpy模块调用C/Fortran混合编程的有限元数值计算程序 操作系统及编译环境: 32bit ...

  9. nyoj 题目10 skiing —— 南阳oj

    题目信息例如以下: skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪, 由于滑雪的确非常刺激.但是为了获得速度,滑的区 ...

  10. bash_action

    https://stackoverflow.com/questions/12076326/how-to-install-maven2-on-redhat-linux #!/bin/bash # Tar ...