二分答案,让$A$推迟出发$mid$的时间。

对于每个相邻的时间区间,两个点都是做匀速直线运动。

以$A$为参照物,那么$A$不动,$B$作匀速直线运动。

若线段$B$到$A$的距离不超过$mid$,则可行。

时间复杂度$O(n\log n)$。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=50010;
const double eps=1e-9;
inline int sgn(double x){
if(x<-eps)return -1;
if(x>eps)return 1;
return 0;
}
int n,m,i;double l,r,mid,f[N],da[N],db[N];
struct P{
double x,y;
P(){}
P(double _x,double _y){x=_x,y=_y;}
P operator+(const P&b){return P(x+b.x,y+b.y);}
P operator-(const P&b){return P(x-b.x,y-b.y);}
P operator*(double b){return P(x*b,y*b);}
P operator/(double b){return P(x/b,y/b);}
double operator*(const P&b){return x*b.x+y*b.y;}
double len(){return hypot(x,y);}
void read(){scanf("%lf%lf",&x,&y);}
}a[N],b[N];
inline double cross(P a,P b){return a.x*b.y-a.y*b.x;}
inline P lerp(P a,P b,double t){return a*(1.0-t)+b*t;}
inline double dist_point_to_segment(P p,P a,P b){
if((b-a).len()>eps&&sgn((p-a)*(b-a))>=0&&sgn((p-b)*(a-b))>=0)return fabs(cross(p-a,b-a))/(b-a).len();
return min((p-a).len(),(p-b).len());
}
inline double cal(P A,P B,P C,P D,double t){
B=B-A;
B=B/B.len();
D=D-C;
D=D/D.len();
D=D-B;
return dist_point_to_segment(A,C,C+D*t);
}
bool check(double mid){
int i=1,j;
P A=a[1],B;
double v=0,w;
for(j=1;j<m;j++)if(mid<f[j]){
w=mid-f[j-1];
B=lerp(b[j],b[j+1],w/db[j]);
break;
}
if(j==m)return 1;
while(i<n&&j<m){
double x=(A-a[i+1]).len(),y=(B-b[j+1]).len();
if((A-B).len()<mid+eps)return 1;
if(x>eps&&y>eps)if(cal(A,a[i+1],B,b[j+1],min(x,y))<mid+eps)return 1;
if(!sgn(x-y)){
A=a[++i];
B=b[++j];
v=w=0;
continue;
}
if(x<y){
A=a[++i];
v=0;
w+=x;
B=lerp(b[j],b[j+1],w/db[j]);
continue;
}
v+=y;
A=lerp(a[i],a[i+1],v/da[i]);
B=b[++j];
w=0;
}
return 0;
}
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)a[i].read();
scanf("%d",&m);
for(i=1;i<=m;i++)b[i].read();
for(i=1;i<n;i++)da[i]=(a[i]-a[i+1]).len();
for(i=1;i<m;i++)db[i]=(b[i]-b[i+1]).len();
for(i=1;i<m;i++)f[i]=f[i-1]+db[i];
r=f[m-1];
if((a[1]-b[m]).len()>r+eps)return puts("impossible"),0;
for(i=40;i;i--)if(check(mid=(l+r)/2))r=mid;else l=mid;
return printf("%.8f",(l+r)/2),0;
}

  

BZOJ4077 : [Wf2014]Messenger的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. android:使用Messenger进行进程间通信(一)

    Messenger简介 Messenger和AIDL是实现进程间通信(interprocess communication)的两种方式. 实际上,Messenger的实现其实是对AIDL的封装. Me ...

  3. Android进程间通讯之messenger

    这两天在看binder,无意间在文档看到messenger这么个东西,感觉这个东西还挺有意思的,给大家分享一下. 平时一说进程间通讯,大家都会想到AIDL,其实messenger和AIDL作用一样,都 ...

  4. android 史上最简单易懂的跨进程通讯(Messenger)!

    不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件! 只需要简单易懂的Messenger,它也称为信使,通过它可以在不同进程中传递m ...

  5. android:使用Messenger进行进程间通信(二)

    //继续完善音乐播放器demo 相关文章: android:使用Messenger进行进程间通信(一):http://www.cnblogs.com/happyhacking/p/5318418.ht ...

  6. How secure FB Messenger is?

    It's reported that FB Messenge is the most secure App for instant messaging service. Let's see if FB ...

  7. Android进程间的通信之Messenger

    Android进程间的通信方式可以通过以下两种方式完成: Android接口定义语言(AIDL) 使用Messenger绑定服务 本文我们将学习使用Messenger绑定服务的方式进行进程间的通信. ...

  8. Android IPC机制之Messenger

    Messenger:两个进程通过Messenger传递消息,进程1和进程2中都需要创建一个Messenger,创建过程:首先进程2需要创建一个服务, 并在服务中创建一个Messenger对象,进程1通 ...

  9. Messenger

    Messenger Mvvm提倡View和ViewModel的分离,View只负责数据的显示,业务逻辑都尽可能放到ViewModel中, 保持View.xaml.cs中的简洁(没有任何代码,除了构造函 ...

随机推荐

  1. 论文阅读笔记三十三:Feature Pyramid Networks for Object Detection(FPN CVPR 2017)

    论文源址:https://arxiv.org/abs/1612.03144 代码:https://github.com/jwyang/fpn.pytorch 摘要 特征金字塔是用于不同尺寸目标检测中的 ...

  2. BZoj 2301 Problem b(容斥定理+莫比乌斯反演)

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 7732  Solved: 3750 [Submi ...

  3. rpm 命令使用 和 lsof -p 1406 使用

    #安装RPM -v 显示详细信息 -h 显示进度 -i 安装 -U 升级 -q 查询 -ql 查看rpm 包装的文件 - qf 查看命令属于哪个RPM 包 -qi 查看RPM包的详细信息 [root@ ...

  4. C#矩阵求逆

    来源:http://zhidao.baidu.com/link?url=DiqAbq9YUYn3z7QjxGGoF0PLZwN-Y9ecqKB7Gy38JWRD1riMIYukVKXKq88pxtWL ...

  5. OAuth2:客户端证书授权(Client Credentials)类型的开放授权

    适应范围 认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的API.例如使用了第三方的静态文件服务,如Google Storage或Amazon S3.这样,你的应用需要通过 ...

  6. MySQL事务提交过程(二)

    上一篇文章我们介绍了在关闭binlog的情况下,事务提交的大概流程.之所以关闭binlog,是因为开启binlog后事务提交流程会变成两阶段提交,这里的两阶段提交并不涉及分布式事务,当然mysql把它 ...

  7. Python执行ImportError:No module named MySQLdb异常

  8. Flink的流处理--KeyBy

    逻辑上将一个流分成不相交的分区,每个分区包含相同键的元素.在内部,这是通过散列分区来实现的 object Keyby { def main(args: Array[String]): Unit = { ...

  9. BZOJ3437 小P的牧场 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8696321.html 题目传送门 - BZOJ3437 题意 给定两个序列$a,b$,现在划分$a$序列. 被划 ...

  10. nexus、maven私服仓库(一)

    下载地址:http://www.sonatype.com/download-oss-sonatype 将下载好的nexus解压到指定的目录下,我这里使用的是nexus-3.14.0-04-win64  ...