正如我们所知,中国古代长城的建造是为了抵御外敌入侵。在长城上,建造了许多烽火台。每个烽火台都监视着一个特定的地区范围。一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅速接力地传递到总部。

现在如图1所示,若水平为南北方向、垂直为海拔高度方向,假设长城就是依次相联的一系列线段,而且在此范围内的任一垂直线与这些线段有且仅有唯一的交点。

图 1

进一步地,假设烽火台只能建造在线段的端点处。我们认为烽火台本身是没有高度的,每个烽火台只负责向北方(图1中向左)瞭望,而且一旦有外敌入侵,只要敌人与烽火台之间未被山体遮挡,哨兵就会立即察觉。当然,按照这一军规,对于南侧的敌情各烽火台并不负责任。一旦哨兵发现敌情,他就会立即以狼烟或烽火的形式,向其南方的烽火台传递警报,直到位于最南侧的总部。

以图2中的长城为例,负责守卫的四个烽火台用蓝白圆点示意,最南侧的总部用红色圆点示意。如果红色星形标示的地方出现敌情,将被哨兵们发现并沿红色折线将警报传递到总部。当然,就这个例子而言只需两个烽火台的协作,但其他位置的敌情可能需要更多。

然而反过来,即便这里的4个烽火台全部参与,依然有不能覆盖的(黄色)区域。

图 2

另外,为避免歧义,我们在这里约定,与某个烽火台的视线刚好相切的区域都认为可以被该烽火台所监视。以图3中的长城为例,若A、B、C、D点均共线,且在D点设置一处烽火台,则A、B、C以及线段BC上的任何一点都在该烽火台的监视范围之内。

图 3

好了,倘若你是秦始皇的太尉,为不致出现更多孟姜女式的悲剧,如何在保证长城安全的前提下,使消耗的民力(建造的烽火台)最少呢?

输入格式:

输入在第一行给出一个正整数N(3 ≤ N ≤105),即刻画长城边缘的折线顶点(含起点和终点)数。随后N行,每行给出一个顶点的xy坐标,其间以空格分隔。注意顶点从南到北依次给出,第一个顶点为总部所在位置。坐标为区间[−109,109)内的整数,且没有重合点。

输出格式:

在一行中输出所需建造烽火台(不含总部)的最少数目。

输入样例:

10
67 32
48 -49
32 53
22 -44
19 22
11 40
10 -65
-1 -23
-3 31
-7 59

输出样例:

2

思路:可以用斜率来判断三个顶中间的那个是否为凸包。

注意:当一个凸顶左边有两个矮顶,那么这个凸顶会被判断两次,所以用 set类型来存。另外如果最后一个顶点太高了,会使前一个顶点被舍弃,所以要实时记录栈顶的值。

#include<iostream>
#include<stack>
#include<set>
using namespace std;
int main(){long n,x[100001],y[100001];stack<int> sk;set<int> st;cin>>n;for(int i=0;i<n;i++){cin>>x[i]>>y[i];while(sk.size()>=2){int b=sk.top();sk.pop();int a=sk.top();if((y[a]-y[b])*(x[a]-x[i])<(y[a]-y[i])*(x[a]-x[b])){sk.push(b);break;}}if(sk.size()>1)st.insert(sk.top());sk.push(i);}cout<<st.size();return 0;
}

7-15 长城 (30 分)相关推荐

  1. 【CCCC】L3-009 长城 (30分),计算几何+凸包,极角排序

    problem L3-009 长城 (30分) 正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应 ...

  2. L3-009 长城 (30分)

    L3-009 长城 (30分) #include <bits/stdc++.h> //#define int ll using namespace std;//#pragma GCC op ...

  3. L3-009 长城 (30 分)-PAT 团体程序设计天梯赛 GPLT

    正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅 ...

  4. L3-009 长城 (30分):几何数学

    正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅 ...

  5. 2006年3月11日下午15点30分左右 偶的BLOG终于上路了^_^

    标记一下,终于建了自己的BLOG,感觉真好,今天是周六,公司还要上班,但自己的博客在此时此地诞生,还是值得高兴的.

  6. 解决python时间戳最大为3001年1月1日15时59分59秒的问题

    自己写个python函数解决python时间戳最大为3001年1月1日15时59分59秒的问题 今天碰到一个情况,在oracle查数,某个数的值是个时间值,而且是9999年12月31日,然后pytho ...

  7. PAT甲级1053 Path of Equal Weight (30分) :[C++题解]dfs求树的路径长度、邻接表

    文章目录 题目分析 题目链接 题目分析 输入样例: 20 9 24 10 2 4 3 5 10 2 18 9 7 2 2 1 3 12 1 8 6 2 2 00 4 01 02 03 04 02 1 ...

  8. CCF201409-5 拼图(30分)

    试题编号: 201409-5 试题名称: 拼图 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个n×m的方格图,现在要用如下L型的积木拼到这个图中,使得方格图正好被拼满 ...

  9. 7-5 公路村村通 (30 分)(C语言实现)

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N) ...

最新文章

  1. 进制转换数据结构c语言不用栈,急求!!!用数据结构(C语言)利用栈实现十进制向二(八)进制转换,要有注释,谢谢!...
  2. 实验记录:vsftp整合mysql-pam管理虚拟账号
  3. C++ boost 实例学习
  4. ios逆向小试牛刀之操作手记
  5. Leet Code OJ 326. Power of Three [Difficulty: Easy]
  6. python多线程爬虫数据顺序_Python爬虫必学知识点:多线程爬虫
  7. java exec 关闭,Java学习之使用Runtime.exec()启动、关闭Tomcat
  8. Matlab 获取主板、硬盘、CPU、BIOS和网卡序列号
  9. 思维导图——史上最详细的计算机基础进制转换讲解
  10. ARM嵌入式系统开发指南-设计和优化系统软件(译作连载)
  11. Python代码制作“恐龙跳一跳“小游戏
  12. Unexpected reserved word ‘await‘
  13. 分析IE浏览器不能上网的原因
  14. 强化学习与Deep Q-Network(DQN)
  15. python生存曲线_生存曲线的估计方法(3):寿命表法
  16. paddle 图标注_化工工艺流程图,你真的弄懂了吗?
  17. Outlook代收发其他邮箱(gmail, qqmail, aliyun, 163)
  18. 计算机音乐遇见,遇见音乐 遇见爱作文
  19. 基于STM32的电阻、电容测量(NE555芯片RC振荡法)
  20. java utf8 简繁转换 类库_java简繁转换(区分港台)

热门文章

  1. 机器学习——方差与偏差
  2. Termux安装完整版Linux(Ubuntu)详细步骤
  3. 【论文笔记】Digital Twin in Industry: State-of-the-Art——Tao Fei
  4. 小程序canvas图片旋转
  5. php怎么兼容360浏览器,360浏览器兼容模式的页面显示不全怎么处理
  6. 头条号文章或者视频需要审核多久
  7. 科普向】Nexus 4 必读与常见问题解答【Android入门读
  8. 为什么适用于Python的TensorFlow正在缓慢消亡
  9. Android的webview有什么用,Android中webview使用的一些坑
  10. 颜色渐变、#16进制转RGB颜色(转Int)