这回好好用半平面交写一次…

看了cls当年写的代码看了好久大概看懂了…cls太强辣

#include<cstdio>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(register int i=1;i<=n;i++)
#define REP(i,a,b) for(register int i=a;i<=b;i++)
#define debug(x) cout<<#x<<" = "<<x<<endl
typedef double dl;
using namespace std;
const int N=305;
const dl INF=~0u>>1;
struct P
{
dl x,y;
P(dl x=0,dl y=0):x(x),y(y){}
}p[N],ps[N];
struct L
{
dl k,b;
}l[N];
inline bool operator < (L a,L b){return a.k<b.k||(a.k==b.k&&a.b>b.b);}
inline bool operator==(L a,L b){return a.k==b.k;}
inline dl get_x(L a,L b){return -(b.b-a.b)/(b.k-a.k);}
inline dl get_val(L a,dl x){return a.k*x+a.b;}
inline L get_line(P a,P b)
{
L res;res.k=(a.y-b.y)/(a.x-b.x);
res.b=a.y-res.k*a.x;return res;
}
inline double calc(dl x,L a,L b)
{
return get_val(a,x)-get_val(b,x);
}
int r,m,n;
inline void input()
{
scanf("%d",&n);
rep(i,n)scanf("%lf",&p[i].x);
rep(i,n)scanf("%lf",&p[i].y);
}
inline void work()
{
rep(i,n-1)l[i]=get_line(p[i],p[i+1]);
m=n-1;sort(l+1,l+m+1);m=unique(l+1,l+m+1)-l-1;
rep(i,m)
{
while(r>1&&get_x(l[r],l[r-1])-get_x(l[r-1],l[i])>=0)r--;l[++r]=l[i];
}m=r;
int i=1,j=1;dl ans=1e30;
#define updata(x) ans=min(ans,calc(x,l[j],get_line(p[i],p[i+1])))
while(i<n&&j<=m)
{
dl L=(j>1?get_x(l[j-1],l[j]):-INF);
dl R=(j<m?get_x(l[j],l[j+1]):INF);
if(L>p[i+1].x){i++;continue;}
if(R<p[i].x){j++;continue;}
updata(max(L,p[i].x));updata(min(R,p[i+1].x));
if(R<p[i+1].x)j++;
else i++;
}
if(n<=2)ans=0;
printf("%.3lf",ans);
}
int main()
{
//freopen("input.in","r",stdin);
input();
work();
return 0;
}

[日常摸鱼]bzoj1038[ZJOI2008]瞭望塔-半平面交的更多相关文章

  1. [日常摸鱼]bzoj1038 [ZJOI2008]瞭望塔-模拟退火/几何

    题意:给一条平面内$n$个点的折线,要求在折线上搞一个高度$h$的瞭望塔,能够看见折线上所有的点,求$h$的最小值($n \leq 300$) updata2018.1.21 正解半平面交在另一篇里面 ...

  2. 【BZOJ1038】[ZJOI2008]瞭望塔 半平面交

    [BZOJ1038][ZJOI2008]瞭望塔 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如 ...

  3. 【bzoj1038】瞭望塔 半平面交

    题目描述 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), ( ...

  4. BZOJ 1038 ZJOI2008 瞭望塔 半平面交

    题目大意及模拟退火题解:见 http://blog.csdn.net/popoqqq/article/details/39340759 这次用半平面交写了一遍--求出半平面交之后.枚举原图和半平面交的 ...

  5. [BZOJ1038][ZJOI2008]瞭望塔(半平面交)

    1038: [ZJOI2008]瞭望塔 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2999  Solved: 1227[Submit][Statu ...

  6. bzoj千题计划126:bzoj1038: [ZJOI2008]瞭望塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=1038 本题可以使用三分法 将点按横坐标排好序后 对于任意相邻两个点连成的线段,瞭望塔的高度 是单峰函 ...

  7. BZOJ-1038 [ZJOI2008]瞭望塔

    先求半平面交,然后建塔的地方肯定是在半平面交的交点上或者是在地面线段的交点上. #include <cstdlib> #include <cstdio> #include &l ...

  8. bzoj1038: [ZJOI2008]瞭望塔

    Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, ...

  9. 【半平面交】bzoj1038 [ZJOI2008]瞭望塔

    http://m.blog.csdn.net/blog/qpswwww/44105605 #include<cstdio> #include<cmath> #include&l ...

随机推荐

  1. 面试阿里,腾讯90%会被问到的zookeeper,把这篇文章看完就够了。

    Zookeeper概述 zookeeper高容错数据一致性协议(CP)的分布式小文件系统,提供类似于文件系统的目录方式的数据存储. 全局数据一致性:每个server保存一份相同的数据副本,client ...

  2. Vegas干货分享,如何制作霓虹灯效果

    在各色各样的展会中,各种炫彩华丽的灯光和光影一直都能吸引到人们大量的关注.同样,在视频制作中,光线的气氛渲染也是常用的方法,常用也就代表着效果明显,也是很多刚学视频剪辑小伙伴们想要学习的一种方法. 今 ...

  3. Apifox接口测试管理工具

    今天发现开发使用了一款新的接口测试工具,一眼看上去比较清爽,主要全中文界面对比postman的全英文,简直友好太多了. 后续又被业界大佬虫师推荐,于是去官网简单了解了一下,Apifox = Postm ...

  4. 2019-2020 ICPC Asia Hong Kong Regional Contest J. Junior Mathematician 题解(数位dp)

    题目链接 题目大意 要你在[l,r]中找到有多少个数满足\(x\equiv f(x)(mod\; m)\) \(f(x)=\sum_{i=1}^{k-1} \sum_{j=i+1}^{k}d(x,i) ...

  5. Codeforces Round #668 (Div. 2) D. Tree Tag 题解(博弈)

    题目链接 题目大意 给你一颗树,Alice在a点,Bob在b点,Alice最多走da步,Bob最多走db步,两人轮流走路.要你判断经过无数次追赶后,Alice是否可以追上Bob,两人进行的都是最优策略 ...

  6. C语言初级编程实践:2048小游戏

    大部分同学学习C语言编程以后不知道能通过什么样的项目才可以锻炼自己的思维功力,2048相信大家都应该熟悉,不管是手机上还是网页版的相信大家都玩过,这个简单的控制台版本的游戏是我曾经在伟易达上班时一个嵌 ...

  7. Hybrid接口应用

    简介:VLAN10内通信,VLAN20内通信,VLAN30与VLAN10.VLAN20.VLAN30皆可通信 Hybrid接口应用拓扑图: 一.配置PC机 ip 并测试相互能否ping通 PC名称 I ...

  8. Arcgis100.4 加载天地图不显示--备注一哈

    Arcgis100.4 默认添加了请求referer 值,天地图会拒绝请求,替换为http://map.tianditu.gov.cn/ 可正常显示.(arcgis 降级到100.1也可正常显示) R ...

  9. vue富文本编辑器vue-quill-editor

    1.下载Vue-Quill-Editor npm install vue-quill-editor --save 2.下载quill(Vue-Quill-Editor需要依赖) npm install ...

  10. 大数据-redis-redis启动出错

    redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 解决方法(1) 首先如果你是从官方redis官 ...