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 [题意] [题解] 可以看到所有村子的瞭望塔所在的位置只会是在相邻两个村子所代表 ...
随机推荐
- [算法练习] UVA-401-Palindromes
UVA Online Judge 题目401 Palindromes 回文串 问题描述: 回文串(Palindromes)就是正着读和反着读完全一样的字符串,例如"ABCDEDCBA&qu ...
- Nginx - Additional Modules, Limits and Restrictions
The following modules allow you to regulate access to the documents of your websites — require users ...
- Android之ORMLite实现数据持久化的简单使用
Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦.(作为程序员,应该学会偷懒)而Java Web开发中有很多orm框架(其实我 ...
- Appcn 移动开发 前台与服务器数据交互
第一次写.嘿嘿. 言归正传,这几天开始学习移动开发,使用的是Appcan平台.Appcan平台采用HTML5+CSS3做开发 实现跨平台,正好可以满足我们的业务需求. Appacn和数据库进行交互的方 ...
- PLSQL插入数据中文乱码的问题
PLSQL插入数据中文乱码的问题 中文乱码就是编码不统一所导致的了,解决办法只需要把编码统一下即可解决了. 具体操作步骤如下: 1.查看服务器端编码 select userenv('language' ...
- C# list使用方法
C# list使用方法 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList ...
- php和apache的关系和作用()
出处:http://blog.csdn.net/hongweideng/article/details/41723465 php和apache的关系和作用是很多学习php的朋友非常关注的问题 首先在一 ...
- Libcurl笔记一
一:1,全局初始化及释放:CURLcode curl_global_init(long flags) flags: CURL_GLOBAL_ALL //初始化所有的可能的调用. CURL_GLOBAL ...
- Java调用外部程序常用算法和封装类
一个项目不可能只使用一种编程语言来开发,也不可能由一个人开发,所以,Java程序员要学会和使用其他编程语言的程序员合作.那么,让我来发布一个工具类--Java外接程序扩展包,并将相应算法发布.Java ...
- Eclipse中将项目导出jar包,以及转化成exe的方法
Eclipse中将项目导出jar包,以及转化成exe的方法 http://wenku.baidu.com/view/385597f07c1cfad6195fa7c6.html