题目描述

致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安。

我们将H村抽象为一维的轮廓。如下图所示

我们可以用一条山的上方轮廓折线(x1, y1), (x2, y2), …. (xn, yn)来描述H村的形状,这里x1 < x2 < …< xn。瞭望塔可以建造在[x1, xn]间的任意位置, 但必须满足从瞭望塔的顶端可以看到H村的任意位置。可见在不同的位置建造瞭望塔,所需要建造的高度是不同的。为了节省开支,dadzhi村长希望建造的塔高度尽可能小。

请你写一个程序,帮助dadzhi村长计算塔的最小高度。

输入输出格式

输入格式:

输入文件tower.in第一行包含一个整数n,表示轮廓折线的节点数目。接下来第一行n个整数, 为x1 ~ xn. 第三行n个整数,为y1 ~ yn。

输出格式:

输出文件tower.out仅包含一个实数,为塔的最小高度,精确到小数点后三位。

输入输出样例

输入样例#1: 复制

6
1 2 4 5 6 7
1 2 2 4 2 1

输出样例#1: 复制

1.000

说明

对于60%的数据, N ≤ 60;

对于100%的数据, N ≤ 300,输入坐标绝对值不超过106,注意考虑实数误差带来的问题。






首先,塔i顶的位置属于一个区域:有所有相邻的两个点确定直线的组成的凸包

然后出现了许多分段的一次函数,断电是地面上的焦点和凸包的拐,然后最值从端点出取得

因此枚举地面上的焦点和凸包的拐点都算一遍就行了,因为这题的数据比较小,也可以枚举每两条直线的焦点算一遍qwq

然后还有第二种做法就是,考虑地面上的每一个线段,有一个理解是:

瞭望塔建的靠左,为了能看到右边的,要高一点

瞭望塔建的靠右,为了能看到左边的,要高一点

对于任意相意两个点连成的线段,瞭望塔的高度 是单峰函数,而且是下凸函数

三分就完事了

不用(hui)证明 - -

给出第一个做法的码:




 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 typedef double db;
 7 const int N=305;
 8 const db inf=99999999999.0;
 9 int n;
10 db ax[N],ay[N];
11 struct LINE{
12     db k,b; //y=kx+b
13 }ln[N];
14 db ans=inf;
15 db sol(db x){ //计算特定横坐标的最小瞭望塔高度
16     db res=0;
17     for(int i=1;i<n;i++)
18         res=max(res,ln[i].k*x+ln[i].b);
19     return res;
20 }
21 int main(){
22     scanf("%d",&n);
23     for(int i=1;i<=n;i++)
24         scanf("%lf",&ax[i]);
25     for(int i=1;i<=n;i++)
26         scanf("%lf",&ay[i]);
27     for(int i=1;i<n;i++){
28         ln[i].k=(ay[i]-ay[i+1])/(ax[i]-ax[i+1]);
29         ln[i].b=ay[i]-ln[i].k*ax[i];
30     }
31     for(int i=1;i<=n;i++)
32         ans=min(ans,sol(ax[i])-ay[i]); //先枚举每个端点
33     for(int i=1;i<n;i++)
34         for(int j=i+1;j<n;j++){
35             db x=(ln[i].b-ln[j].b)/(ln[j].k-ln[i].k); //求两直线的交点
36             for(int k=1;k<n;k++)
37                 if(ax[k]<=x&&x<=ax[k+1])
38                     ans=min(ans,sol(x)-ln[k].k*x-ln[k].b); //最小化答案
39         }
40     printf("%.3lf\n",ans);
41     return 0;
42 }

转载于:https://www.cnblogs.com/zhangbuang/p/10549114.html

P2600 [ZJOI2008]瞭望塔(半平面交)相关推荐

  1. luogu P2600 [ZJOI2008]瞭望塔

    luogu P2600 [ZJOI2008]瞭望塔 大意 题目讲得很清楚啊 题解 可以发现,那个点一定是某两条直线的交点 然后直接枚举两条直线就好了 // luogu-judger-enable-o2 ...

  2. [P2600][ZJOI2008]瞭望塔(半平面交)

    先在一个无穷高的位置画一条线为上界,把左右两端点向上连,形成一个封闭的多边形,求半平面交找到瞭望塔顶可以在的区域.因为点和点都是以直线连接的,斜率固定,所以半平面交到底边距离最近的点一定是某个拐点.那 ...

  3. [BZOJ 1038][ZJOI 2008]瞭望塔(半平面交)

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1038 思路 这个题在上海ACM/ICPC冬令营的比赛中也考过,不是很难,不过想要想到用半平 ...

  4. P2600 [ZJOI2008]瞭望塔

    传送门 暴力也行,退火也行,不是很明白为啥还要用半平面交-- 总之就是把原来的所有限制看成一堆半平面 根据黄学长的博客塔肯定建在转折处最优 //minamoto #include<bits/st ...

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

    bzoj1038 [ZJOI2008]瞭望塔 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1038 题意: 村中要建立一个瞭望塔,我们将H ...

  6. 【BZOJ 1038】 1038: [ZJOI2008]瞭望塔

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

  7. 【BZOJ 1038】 [ZJOI2008]瞭望塔

    1038: [ZJOI2008]瞭望塔 Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 973   Solved: 428 [ Submit][ S ...

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

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

  9. bzoj 1038 [ZJOI2008]瞭望塔

    1038: [ZJOI2008]瞭望塔 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2438  Solved: 1004 [Submit][Sta ...

最新文章

  1. 需要反射时使用dynamic
  2. LeetCode 76. Minimum Window Substring / 567. Permutation in String
  3. Linux centos7 NMAP网络探测工具安装过程以及使用示例!
  4. 薛其坤、向涛两位院士,担任这家研究院联合院长
  5. JS选中OPTION
  6. 我对观察者模式的理解,之前一直很乱
  7. iOS轻量分组日志工具 Log4OC
  8. Linux系统磁状态检测,检测Linux硬件状态
  9. SAP面向iOS设备推Cloud Platform SDK工具
  10. 10.30完美笔试题
  11. 嵌入式操作系统内核原理和开发(开篇)
  12. 【Linux】详解Linux中3个文件查找相关命令
  13. 软件项目管理MOOC(北邮)——第四章测试答案
  14. ORL Character Recgnition
  15. 未来教育计算机二级office评分有问题,未来教育计算机二级-未来教育计算机二级msoffice题库评分 – 手机爱问...
  16. 从faker.js 开源作者Marak已删除了GIthub所有代码我们得到了什么教训
  17. aardio - 时钟例程
  18. 数学运算符号的英文表达
  19. 数字滚动(微信小程序)
  20. Notepad++统计文本字数

热门文章

  1. 立方卷积插值 matlab,matlab旋转实现(最近邻值,双线性,三次卷积插值实现插值)
  2. linux 串口 设置rts,linux内核关于uart2配置为RTS引脚时,串口无法使用的问题
  3. 花朝节汉服摄影征集、照片征集、视频征集小程序
  4. 商场根据会员积分打折
  5. QT 小游戏 : 别踩白块儿~
  6. [BUUCTF]PWN——mrctf2020_shellcode_revenge(可见字符shellcode)
  7. 大数据离线流程(小练习二)
  8. 2021.9.9科研日志
  9. SQL笔试题:某团数分岗笔试真题详解
  10. 关于CWnd和HWND