CF 8D Two Friends 【二分+三分】
来源:互联网 发布:帝国cms 栏目别名 编辑:程序博客网 时间:2024/05/16 16:02
三个地点构成一个三角形。
判断一下两个人能否一起到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-6struct 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 (三分+二分)
- CF 8D Two Friends 【二分+三分】
- Codeforces 8D Two Friends 三分+二分+计算几何
- codeforces #8D Two Friends 二分答案+计算几何
- codeforces #8D Two Friends (二分答案+计算几何)
- Codeforces 8D Two Friends
- RMQ+二分 - CF 689D Friends and Subsequences
- CF 361 D. Friends and Subsequences (RMQ+二分查找)
- CF 66D Petya and His Friends
- 【打CF,学算法——四星级】CodeForces 689D Friends and Subsequences (RMQ+二分)
- CF 251D Two Sets
- codeforce 439D 二分或者三分
- Codeforces 609D 二分 or 三分
- CF 61 div2 D. Petya and His Friends
- Cf Round #361 (Div. 2) 689D. Friends and Subsequences
- CF-13D - Two Paths(搜索)
- CF 14 problem D - Two paths
- 【CF 125D】 Two progressions 划分等差数列
- .net 多次打开同一个窗口
- SQL Server网站防注入终极解决方案
- bak格式文件导入mysql
- 锋利的jquery读书心得
- hdu2063(最大匹配+匈牙利算法)
- CF 8D Two Friends 【二分+三分】
- 《Android内核剖析》笔记 第7章 理解Context
- C# 4.0 新特性dynamic、可选参数、命名参数等
- 11gR2 ocr votedisk的恢复测试
- Django-CKedtior图片找不到的问题
- 泛型的模板思想
- UNIX网络编程——设置套接字超时
- android成长记(2)-------关于apk的生成以及使用
- struts2 升级到2.3.8后 使用property标签 html字符转义