1038: [ZJOI2008]瞭望塔 - BZOJ
Description
致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安。我们将H村抽象为一维的轮廓。如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), (x2, y2), …. (xn, yn)来描述H村的形状,这里x1 < x2 < …< xn。瞭望塔可以建造在[x1, xn]间的任意位置, 但必须满足从瞭望塔的顶端可以看到H村的任意位置。可见在不同的位置建造瞭望塔,所需要建造的高度是不同的。为了节省开支,dadzhi村长希望建造的塔高度尽可能小。请你写一个程序,帮助dadzhi村长计算塔的最小高度。
Input
第一行包含一个整数n,表示轮廓折线的节点数目。接下来第一行n个整数, 为x1 ~ xn. 第三行n个整数,为y1 ~ yn。
Output
仅包含一个实数,为塔的最小高度,精确到小数点后三位。
Sample Input
【输入样例一】
6
1 2 4 5 6 7
1 2 2 4 2 1
【输入样例二】
4
10 20 49 59
0 10 10 0
Sample Output
【输出样例一】
1.000
【输出样例二】
14.500
【数据规模】
对于60%的数据, N ≤ 60;
对于100%的数据, N ≤ 300,输入坐标绝对值不超过106,注意考虑实数误差带来的问题。
其实这个范围是可以乱搞的,我O(n^2)乱搞,结果各种细节没注意
首先从别人那里知道了塔的横坐标要么是凸壳上的顶点的横坐标,要么是地图拐点的横坐标
所以只要求出来这些横坐标就行
主要是求凸壳上的顶点
我们枚举一条线与其他线的交点(只与斜率比它大的线做交点,然后取横坐标最小的,这样就不重不漏),但是这个不一定是凸包上的,所以还要判断一下
const
maxn=;
inf=;
eps=1e-7;
type
node=record
x,y:double;
end;
var
a,b,c:array[..maxn]of node;
ans:double;
n:longint; function min(x,y:double):double;
begin
if x<y then exit(x);
exit(y);
end; function max(x,y:double):double;
begin
if x>y then exit(x);
exit(y);
end; procedure init;
var
i,j:longint;
y:double;
flag:boolean;
begin
read(n);
for i:= to n do
read(a[i].x);
for i:= to n do
read(a[i].y);
for i:= to n- do
begin
b[i].x:=(a[i].y-a[i+].y)/(a[i].x-a[i+].x);
b[i].y:=a[i].y-a[i].x*b[i].x;
end;
ans:=inf;
for i:= to n do
begin
y:=a[i].y;
for j:= to n- do
y:=max(y,a[i].x*b[j].x+b[j].y);
ans:=min(ans,y-a[i].y);
end;
c:=a;
for i:= to n- do
begin
for j:= to n- do
if b[i].x+eps<b[j].x then
begin
a[i].x:=(b[j].y-b[i].y)/(b[i].x-b[j].x);
a[i].y:=a[i].x*b[i].x+b[i].y;
break;
end;
for j:= to n- do
if b[i].x+eps<b[j].x then
if (b[j].y-b[i].y)/(b[i].x-b[j].x)<a[i].x then
begin
a[i].x:=(b[j].y-b[i].y)/(b[i].x-b[j].x);
a[i].y:=a[i].x*b[i].x+b[i].y;
end;
end;
for i:= to n- do
begin
flag:=true;
for j:= to n- do
if a[i].y+eps<a[i].x*b[j].x+b[j].y then flag:=false;
if flag=false then continue;
for j:= to n- do
if (c[j].x-eps<a[i].x) and (a[i].x<c[j+].x+eps) then ans:=min(ans,a[i].y-a[i].x*b[j].x-b[j].y);
end;
write(ans+eps::);
end; begin
init;
end.
1038: [ZJOI2008]瞭望塔 - BZOJ的更多相关文章
- 【BZOJ 1038】 1038: [ZJOI2008]瞭望塔
1038: [ZJOI2008]瞭望塔 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 ...
- 1038: [ZJOI2008]瞭望塔
半平面交. 半平面指的就是一条直线的左面(也不知道对不对) 半平面交就是指很多半平面的公共部分. 这道题的解一定在各条直线的半平面交中. 而且瞭望塔只可能在各个点或者半平面交折线的拐点处. 求出半平面 ...
- 【BZOJ】1038: [ZJOI2008]瞭望塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1038 题意:给出n个x轴各不相同的二维整点,且升序,n<=300,坐标绝对值<=10^6 ...
- bzoj 1038 [ZJOI2008]瞭望塔(半平面交)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1038 [题意] 找一个最低塔高使可以看到村庄的每一个角落. [思路] 半平面交 能够看 ...
- BZOJ 1038 ZJOI2008 瞭望塔 半平面交
题目大意及模拟退火题解:见 http://blog.csdn.net/popoqqq/article/details/39340759 这次用半平面交写了一遍--求出半平面交之后.枚举原图和半平面交的 ...
- bzoj千题计划126:bzoj1038: [ZJOI2008]瞭望塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1038 本题可以使用三分法 将点按横坐标排好序后 对于任意相邻两个点连成的线段,瞭望塔的高度 是单峰函 ...
- [BZOJ1038][ZJOI2008]瞭望塔(半平面交)
1038: [ZJOI2008]瞭望塔 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2999 Solved: 1227[Submit][Statu ...
- 【BZOJ1038】[ZJOI2008]瞭望塔 半平面交
[BZOJ1038][ZJOI2008]瞭望塔 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如 ...
- 【BZOJ 1038】[ZJOI2008]瞭望塔
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1038 [题意] [题解] 可以看到所有村子的瞭望塔所在的位置只会是在相邻两个村子所代表 ...
随机推荐
- Apache ab 测试工具使用(一)
简述: 试用apache ab测试工具 下载点 http://httpd.apache.org/download.cgi 参考: http://jingyan.baidu.com/article/e3 ...
- 【AngularJs】---"Error: [ng:areq] Argument 'fn' is not a function, got undefined"
项目中把controller.service抽取出来 一步一步没有报错 index那里加 <script src="js/controllers/XXController.js&quo ...
- ios获取当前语言
上代码: + (NSString*)getPreferredLanguage { NSUserDefaults * defaults = [NSUserDefaults standardUserDef ...
- WPF、Silverlight项目中使用柱状图、饼状图、折线图
在开发的过程中,可能会遇到柱状图.饼状图.折线图来更好的显示数据,最近整理了一下,遂放出来望需要的朋友可以参考.本文仅仅是简单显示,如需复杂显示效果请参考官网代码示例.----本文代码使用WPF,Si ...
- PHP的语言规范
PHP的语言规范: 1.php中的变量名区分大小写,但是函数名,类名,方法名,不区分大小写,但建议区分大小写 2.php代码必须书写在<?php?>(php标签),开启标记(<?ph ...
- c# winform 点菜宝接口demo程序
前几天写了一篇关于c#调用 win32API的文章,有同学对点菜宝接口感兴趣,所以就把写的demo程序共享出来,大家一起讨论改进,so放百度云地址: 百度云下载地址
- vm安装mac系统
零:起因想学习IOS开发,但是mac pro和mac mini都舍不得买,去apple店体验了几次mac不怎么喜欢,so… 一:原料VMware-workstation-full-12.0.0-298 ...
- qml实现自定义标题栏按钮
自定义的标题栏按钮是由Rectangle来实现的,在Rectangle中需要4张图片,分别在鼠标进入按钮区.鼠标离开按钮区(正常状态下).鼠标按下和鼠标释放时所加载的图片.下面是实现自定义按钮的代码( ...
- php验证码的简单例子
php随机验证码: <?php $image_width=140; $image_height=50; srand(microtime()*10000); ...
- mysql实例 保存查询结果到变量
本文介绍下,一个mysql的例子,将查询到的数据结果保存到一个变量中.有需要的朋友可以参考下. 本代码演示: 将mysql查询结果保存到变量中的方法. 代码: view source print? 0 ...