CF 8D two friends
独立想的好开心呀(然而是一道水题)。
可以看出这道题的答案是满足单调性的,然后可以考虑二分。
对于当前二分出的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的更多相关文章
- CF 8D Two Friends 【二分+三分】
三个地点构成一个三角形. 判断一下两个人能否一起到shop然后回家,如果不能: 两个人一定在三角形内部某一点分开,假设沿着直线走,可以将问题简化. 三分从电影院出来时候的角度,在对应的直线上二分出一个 ...
- CF 8D Two Friends (三分+二分)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意 :有三个点,p0,p1,p2.有两个人ali ...
- Window8.1 64位无法使用Debug命令的解决方法[附牛人代码]
偶然看到网上一篇文章,讲的是世界黑客编程大赛第一名的一个很酷的程序,大小仅有4KB,使用debug命令执行. 悲催的是win8.1的debug命令不能使用. 错误例如以下: 解决方法例如以下: 1. ...
- 协议分析之qq协议---qq登录
QQ 协议分析:获取各类登录会话密钥 我们知道QQ的一些会话密钥是在登录过程中生成的,尤其是Session Key,有了它便可以解密出聊天文本内容.本文主要是了解一下QQ的加密机制,首先是用嗅探工具W ...
- OpenSSL和Python实现RSA Key公钥加密私钥解密
基于非对称算法的RSA Key主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密).本文提供一个基于OpenSSL和Python进行非对称加解密的例子. 1. ...
- 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 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
随机推荐
- systemtap-note-6-userspace-stack-backtrace
http://nanxiao.me/systemtap-note-6-userspace-stack-backtrace/
- 在java中String类为什么要设计成final?
大神链接:在java中String类为什么要设计成final? - 程序员 - 知乎 我进行了重新排版,并且更换了其中的一个例子,让我们更好理解. String很多实用的特性,比如说“不可变性”,是工 ...
- UI标签库专题二:JEECG智能开发平台Column(列) 子标签
UI标签库专题二:JEECG智能开发平台Column(列) 子标签 1.1. Column(列) 子标签 1.1.1. 演示样例 <t:dgCol title="年龄" ...
- STM32W108无线传感器网络节点自组织与移动智能体导航技术
使用STM32W108无线开发板及节点完毕大规模网络的自组建,网络模型选择树型,网络组建完毕之后,使用基于接收信号强度指示RSSI(ReceivedSignal Strength Indication ...
- Makefile:1: *** 多个目标匹配。 停止。
以下是我自己写的Makefile 文件: .SUFFIXES:.c .o CC = gcc SRCS = stat.c OBJS = $(SRCS:.c=.o) EXEC = test start:$ ...
- 基于PHP函数的alert弹框
可以设置弹出信息,跳转地址,跳转的时间,跳转的信息标题提示: 手机端加上<meta name='viewport' content='width=device-width, initial-sc ...
- 常见mysql分布式数据中间件
一般分为三种: 1. proxy sharding,目前由cobar,mycat,drds,atlas修改,这几个产品的起源一般是mysqlproxy 或 ameoba,特点是mysql协议基本兼容, ...
- SpringMVC+ajaxFileUpload上传图片 IE浏览器弹下载框问题解决方式
如题,简单记录一下这个问题的解决的方法,导致问题的核心原因是:ajaxfileupload不支持响应头ContentType为application/json的设置.而且IE也不支持这样的格式,而当我 ...
- JS中prototype,js原型扩展
作者:轩脉刃(yjf512)出处:(http://www.cnblogs.com/yjf512/)版权声明:本文的版权归作者与博客园共有.欢迎转载阅读,转载时须注明本文的详细链接. 原文 http:/ ...
- HDU 3714/UVA1476 Error Curves
Error Curves Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...