三个地点构成一个三角形。

判断一下两个人能否一起到shop然后回家,如果不能:

两个人一定在三角形内部某一点分开,假设沿着直线走,可以将问题简化。

三分从电影院出来时候的角度,在对应的直线上二分出一个分离点即可。

三分角度的方法:在shop和home两个点之间找一个点p,链接p和电影院,在这个线段上面二分出分离点。

注意:精度。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
#define sqr(x) ((x)*(x))
#define eps 1e-6 struct POINT {
double x, y;
POINT() {}
POINT(double _x, double _y): x(_x), y(_y) {}
} c, s, h;
double t1, t2; double dist(POINT &x, POINT &y) {
return sqrt(sqr(x.x-y.x) + sqr(x.y-y.y));
}
double calc(double m) {
POINT a = POINT(s.x*(1-m) + h.x*m, s.y*(1-m) + h.y*m);
POINT b;
double ac = dist(a, c);
double ah = dist(a, h);
double as = dist(s, a);
if (ac + ah <= t2 && ac + as <= t1) {
return min(t2-ah, t1-as);
}
double l = 0, r = 1, mid, la, lb, lc;
for (int i=0; i<300; i++) {
mid = (l + r)/2.0;
b = POINT(c.x*(1-mid) + a.x*mid, c.y*(1-mid) + a.y*mid);
la = dist(b, c);
lb = dist(b, h);
lc = dist(b, s);
if (la+lb<=t2 && la+lc<=t1) l = mid;
else r = mid;
}
b = POINT(c.x*(1-l) + a.x*l, c.y*(1-l) + a.y*l);
return dist(b, c);
}
int main() { cin >>t1>>t2>>c.x>>c.y>>h.x >> h.y >> s.x>> s.y;
double la, lb, lc;
la = dist(c, s);
lb = dist(c, h);
lc = dist(s, h); if (lb + t2 >= la + lc) {
printf("%.10lf\n", min(lb+t2, la+lc+t1));
return 0;
}
t1 += la + 1e-10;
t2 += lb + 1e-10; double l = 0, r = 1, lm, rm, ans = 0, v1, v2;
for (int i=0; i<300; i++) {
lm = (2*l + r)/3.0, rm = (2*r + l)/3.0;
v1 = calc(lm), v2 = calc(rm);
ans = max(ans, max(v1, v2));
if (v1 < v2) l = lm;
else r = rm;
} printf("%.10lf\n", ans); return 0;
}

CF 8D Two Friends 【二分+三分】的更多相关文章

  1. 第二次组队赛 二分&三分全场

    网址:CSUST 7月30日(二分和三分) 这次的比赛是二分&三分专题,说实话以前都没有接触过二分,就在比赛前听渊神略讲了下.......不过做着做着就对二分熟悉了,果然做题是学习的好方法啊~ ...

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

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

  3. CF 8D two friends

    独立想的好开心呀(然而是一道水题). 可以看出这道题的答案是满足单调性的,然后可以考虑二分. 对于当前二分出的mid值,我们考虑这个过程. 假设他们能共同走到shop然后共同会home $$Ans = ...

  4. HDU 2298 Toxophily 【二分+三分】

    一个人站在(0,0)处射箭,箭的速度为v,问是否能够射到(x,y)处,并求最小角度. 首先需要判断在满足X=x的情况下最大高度hmax是否能够达到y,根据物理公式可得 h=vy*t-0.5*g*t*t ...

  5. codeforces 8D Two Friends 二分+ 判断三个圆是否有公共交点

    题目链接 有两个人x, y, 现在在A点, x要直接去B点, y要先去C点在去B点, 现在给出x, y两人可以行走的最大距离T1, T2, 求出他们从A点出发之后, 可以走的最长的公共路径. 我们先看 ...

  6. Codeforces Gym100543B 计算几何 凸包 线段树 二分/三分 卡常

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543B.html 题目传送门 - CF-Gym100543B 题意 给定一个折线图,对于每一条 ...

  7. Toxophily-数论以及二分三分

    G - Toxophily Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

  8. CodeForces - 1059D——二分/三分

    题目 题目链接 简单的说,就是作一个圆包含所有的点且与x轴相切,求圆的最小半径 方法一 分析:求最小,对半径而言肯定满足单调性,很容易想到二分.我们二分半径,然后由于固定了与X轴相切,我们对于每一个点 ...

  9. uva 1463 - Largest Empty Circle on a Segment(二分+三分+几何)

    题目链接:uva 1463 - Largest Empty Circle on a Segment 二分半径,对于每一个半径,用三分求出线段到线段的最短距离,依据最短距离能够确定当前R下每条线段在[0 ...

随机推荐

  1. css3之background

    background background: (1)url(image1.png) right bottom, (2)url(image2.png) center, (3)url(image3.png ...

  2. css技巧之如何实现ul li边框重合

    提到边框重合,我们不妨打开淘宝首页浏览主体分类内容板块瞧瞧---亲,你看到了,正是这个,边框重合.其实我们不难发现,这个效果并不难,只是我们没有真正的动手做过而已,所以不知道怎么做,那么下面就是一个很 ...

  3. Python 一路走来 Django

    Web 框架 (本质:socket) Python web框架           自己实现socket                - Tornado           基于wsgi       ...

  4. setf

    independent flags boolalpha read/write bool elements as alphabetic strings (true and false). showbas ...

  5. uc/os 笔记(转)

    1.uC/OS-II中使用互斥信号对象应该注意 互斥信号对象(Mutual Exclusion Semaphore)简称Mutex,是uC/OS-II的内核对象之一,用于管理那些需要独占访问的资源,并 ...

  6. (转)CentOS 日志分析

     1.了解日志文件    linux的日志文件可以说是最有用的了,日志文件可以让我们了解系统所处的状态,比如能查出哪些用户有登入,这也涉及相关的安全问题.如果我们不懂得分析日志,可能我们都不知道有些用 ...

  7. LeetCode_Climbing Stairs

    ou are climbing a stair case. It takes n steps to reach to the top. or steps. In how many distinct w ...

  8. Windows进程间通信的各种方法

    原文:Windows进程间通信的各种方法 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组成.多进程/多线程是Windows操作系 ...

  9. 运用Swagger 添加WebAPI 文档

    1. Go to Web link https://www.nuget.org/packages/Swashbuckle/ and check which version do we want. 2. ...

  10. Decimal

    Description 任意一个分数都是有理数,对于任意一个有限小数,我们都可以表示成一个无限循环小数的形式(在其末尾添加0),对于任意一个无限循环小数都可以转化成一个分数.现在你的任务就是将任意一个 ...