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

判断一下两个人能否一起到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. 现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N<100

    #include <iostream> using namespace std; struct student {char num[100];  char name[100];  int ...

  2. ocos 信号量

    信号量分为  :声明信号量.互斥信号量 转: ucos-ii学习笔记——信号量的原理   ucos-ii学习笔记——信号量的原理及使用 #include "INCLUDES.h" ...

  3. Sublime Text 2 注册码

    ----- BEGIN LICENSE ----- Andrew Weber Single User License EA7E- 813A03DD 5E4AD9E6 6C0EEB94 BC99798F ...

  4. LeetCode_Minimum Path Sum

    iven a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  5. ISO7816标准IO通讯方面的需求

    以下需求适用于符合ISO7816的Reader的测试:换句话说只要Reader能通过以下指令,就基本符合了ISO7816标准,具体需求为: 1 概述 本文档主要描述CDCAS系统中用到的CA证书的格式 ...

  6. NoMachine 远程桌面控制

    它是一个基于企业级对比套装的开源的终端服务器.它允许用户在连接速度缓慢或者窄带宽的情况下,对X11会话进行远程访问. NX项目提供一整套的运行库文件以及优化的来自X11,SMB,IPP,HTTP及其网 ...

  7. 15个提高编程技巧的JavaScript工具

    原文地址:http://www.imooc.com/wenda/detail/243523 JavaScript脚本库是一个预先用JavaScript语言写好的库,它方便了我们开发基于JavaScri ...

  8. Polymorphism & Overloading & Overriding

    In Java, a method signature is the method name and the number and type of its parameters. Return typ ...

  9. JS字符串拼接优化

    // 请把以下用于连接字符串的JavaScript代码修改为更高效的方式 var htmlString = ‘ < div class=”container” > ’ + ‘ < u ...

  10. JavaScript 数组的遍历

    var a = [1, 2, 3]; // for循环 for(var i = 0; i < a.length; i++) { console.log(a[i]); } // while循环 v ...