[日常摸鱼]bzoj1038[ZJOI2008]瞭望塔-半平面交
这回好好用半平面交写一次…
看了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]瞭望塔-半平面交的更多相关文章
- [日常摸鱼]bzoj1038 [ZJOI2008]瞭望塔-模拟退火/几何
题意:给一条平面内$n$个点的折线,要求在折线上搞一个高度$h$的瞭望塔,能够看见折线上所有的点,求$h$的最小值($n \leq 300$) updata2018.1.21 正解半平面交在另一篇里面 ...
- 【BZOJ1038】[ZJOI2008]瞭望塔 半平面交
[BZOJ1038][ZJOI2008]瞭望塔 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如 ...
- 【bzoj1038】瞭望塔 半平面交
题目描述 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), ( ...
- BZOJ 1038 ZJOI2008 瞭望塔 半平面交
题目大意及模拟退火题解:见 http://blog.csdn.net/popoqqq/article/details/39340759 这次用半平面交写了一遍--求出半平面交之后.枚举原图和半平面交的 ...
- [BZOJ1038][ZJOI2008]瞭望塔(半平面交)
1038: [ZJOI2008]瞭望塔 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2999 Solved: 1227[Submit][Statu ...
- bzoj千题计划126:bzoj1038: [ZJOI2008]瞭望塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1038 本题可以使用三分法 将点按横坐标排好序后 对于任意相邻两个点连成的线段,瞭望塔的高度 是单峰函 ...
- BZOJ-1038 [ZJOI2008]瞭望塔
先求半平面交,然后建塔的地方肯定是在半平面交的交点上或者是在地面线段的交点上. #include <cstdlib> #include <cstdio> #include &l ...
- bzoj1038: [ZJOI2008]瞭望塔
Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, ...
- 【半平面交】bzoj1038 [ZJOI2008]瞭望塔
http://m.blog.csdn.net/blog/qpswwww/44105605 #include<cstdio> #include<cmath> #include&l ...
随机推荐
- Mac专用下载器Folx软件中有没有“下载速度控制”功能
Mac专用下载器Folx软件不仅下载速度快,功能多,而且也可以实现下载上传速度控制的功能.下面小编将在Mac系统平台上,使用Folx 5版本,向大家全面介绍下Folx这款下载软件的速度控制功能,其中包 ...
- 思维导图MindManager有新手引导功能吗
无论是对于初次使用Mindmanager思维导图软件的新手来说,还是对于有一定软件使用基础的进阶者来说,Mindmanager思维导图软件的帮助功能都能给予用户很大的指导作用. Mindmanager ...
- Pytest自动化测试 - 简易教程
简介 pytest是动态编程语言Python专用的测试框架,它具有易于上手.功能强大.可扩展性好.兼容性强.效率高.第三方插件丰富等特点. 功能特征: 完整的文档,包括安装,教程和PDF文档 简单而又 ...
- SpringBoot2整合Redis
pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- WireShark抓包分析以及对TCP/IP三次握手与四次挥手的分析
WireShark抓包分析TCP/IP三次握手与四次挥手 Wireshark介绍: Wireshark(前称Ethereal)是一个网络封包分析软件.功能十分强大,是一个可以在多个操作系统平台上的开源 ...
- 这些鲜为人知的前端冷知识,你都GET了吗?
背景 最近公司项目不多,比较清闲,划水摸鱼混迹于各大技术博客平台,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来,不由的发出一声感叹! 前端可真是博大精深 于是 ...
- FPGA 串口
VerilogHDL那些事儿_建模篇(黑金FPGA开发板配套教程) 作者:akuei2 说明:参照该书将部分程序验证学习一遍 学习时间:2014年5月3号 主要收获: 1. 对串口有初步了解: 2. ...
- 最新小样本学习综述 A Survey on Few-Shot Learning | 四大模型Multitask Learning、Embedding Learning、External Memory…
目录 原文链接: 小样本学习与智能前沿 01 Multitask Learning 01.1 Parameter Sharing 01.2 Parameter Tying. 02 Embedding ...
- 在 CentOS 7 安装 RabbitMQ
一.安装 Erlang RabbitMQ 是使用 Erlang 开发的,所以需要首先安装 Erlang,本文安装其最新版本 添加 repo 文件: sudo vim /etc/yum.repos.d/ ...
- Spring Cloud 学习 (九) Spring Security, OAuth2
Spring Security Spring Security 是 Spring Resource 社区的一个安全组件.在安全方面,有两个主要的领域,一是"认证",即你是谁:二是& ...