#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
const double eps=1e-;
double ans=1e10;
int n,head,tail;
struct vec{
double x,y;
vec(double x=,double y=):x(x),y(y){}
vec operator-(vec& a){
return vec(x-a.x,y-a.y);
}
vec operator+(vec&a){
return vec(x+a.x,y+a.y);
}
}po[maxn],g[maxn];
vec operator*(vec a,double t){return vec(a.x*t,a.y*t);}
double cross(vec a,vec b){return a.x*b.y-b.x*a.y;}
struct lin{
vec p,v;//p是直线上一个点,v是方向向量
double ang;//ang是斜率;
lin(){}
lin(vec p,vec v):p(p),v(v){ang=atan2(v.y,v.x);}
bool operator<(const lin&a)const{
return ang<a.ang;
}
}ll[maxn],q[maxn],bb,cc;
bool onl(lin L,vec p){
return cross(L.v,p-L.p)>;
}
vec qj(lin a,lin b){
vec u=a.p-b.p;
double t=cross(b.v,u)/cross(a.v,b.v);
return a.v*t+a.p;
}
void halfj(){
sort(ll,ll+n);
q[head=tail=]=ll[];
for(int i=;i<n;++i){
while(head<tail&&!onl(ll[i],g[tail-]))tail--;
while(head<tail&&!onl(ll[i],g[head]))head++;
q[++tail]=ll[i];
if(fabs(cross(q[tail].v,q[tail-].v))<eps){
--tail;if(onl(q[tail],ll[i].p))q[tail]=ll[i];
}
if(head<tail)g[tail-]=qj(q[tail-],q[tail]);
}
while(head<tail&&!onl(q[head],g[tail-]))--tail;
}
int main(){
cin>>n;
for(int i=;i<=n;++i){
scanf("%lf",&po[i].x);
}
for(int i=;i<=n;++i){
scanf("%lf",&po[i].y);
}
po[].x=po[].x;po[].y=;
po[n+].x=po[n].x;po[n+].y=;
for(int i=;i<=n;++i){
ll[i]=lin(po[i],po[i+]-po[i]);
}
n+=;
halfj();
for(int k=;k<tail;++k)
for(int i=;i<n-;++i){
vec tmp;tmp.x=g[k].x;tmp.y=-;
if(g[k].x>=po[i].x&&g[k].x<=po[i+].x){
cc=lin(po[i],po[i+]-po[i]);
bb=lin(tmp,g[k]-tmp);
ans=min(ans,g[k].y-qj(cc,bb).y);
}
}
for(int k=;k<=n-;++k)
for(int i=;i<tail-;++i){
vec tmp;tmp.x=po[k].x;tmp.y=-;
if(po[k].x>=g[i].x&&po[k].x<=g[i+].x){
cc=lin(g[i],g[i+]-g[i]);
bb=lin(tmp,po[k]-tmp);
ans=min(ans,qj(cc,bb).y-po[k].y);
}
}
printf("%.3lf",ans);
return ;
}

最新文章

  1. 【NLP】蓦然回首:谈谈学习模型的评估系列文章(一)
  2. 新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序
  3. Kooboo CMS - @Html.FrontHtml().Meta()详解。
  4. dubbo分布式rpc框架用法
  5. java连接数据库的模糊查询
  6. Java多线程 LockSupport
  7. 利用ddmlib 实现 PC端与android手机端adb forword socket通信(转)
  8. 使用自定义 jQuery 插件的一个选项卡Demo
  9. Node.js:常用工具util
  10. nodeJS之路径PATH模块
  11. MapReduce中Combiner规约的作用以及不能作为MR标配的原因
  12. python+adb实现自动化获取手机信息
  13. WBS分析
  14. java内存模型及内存与cpu之间的关系
  15. Android中如何在代码中设置View的宽和高?
  16. BZOJ3992: [SDOI2015]序列统计(NTT 原根 生成函数)
  17. aishell数据处理为thchs30格式
  18. JavaScript常用知识点整理——思维导图
  19. 学习动态性能表(3)--v$sql&amp;v$sql_plan
  20. javascript第四节

热门文章

  1. Java 中的日志
  2. pandas,读取或存储DataFrames的数据到mysql中
  3. step_by_step_记录一个javascript字符串处理问题
  4. model 字段参数 choice
  5. Vue如何更新子组件
  6. tomcat关闭时Log4j2报错 Log4j Log4j2-TF-4-Scheduled-1 memory leak
  7. Linux查看机器负载
  8. c++11新标准for循环和lambda表达式
  9. [Javasript] 同时实现单击和双击事件
  10. H5获取原生传过来的值