7-15 长城 (30 分)
正如我们所知,中国古代长城的建造是为了抵御外敌入侵。在长城上,建造了许多烽火台。每个烽火台都监视着一个特定的地区范围。一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅速接力地传递到总部。
现在如图1所示,若水平为南北方向、垂直为海拔高度方向,假设长城就是依次相联的一系列线段,而且在此范围内的任一垂直线与这些线段有且仅有唯一的交点。
图 1
进一步地,假设烽火台只能建造在线段的端点处。我们认为烽火台本身是没有高度的,每个烽火台只负责向北方(图1中向左)瞭望,而且一旦有外敌入侵,只要敌人与烽火台之间未被山体遮挡,哨兵就会立即察觉。当然,按照这一军规,对于南侧的敌情各烽火台并不负责任。一旦哨兵发现敌情,他就会立即以狼烟或烽火的形式,向其南方的烽火台传递警报,直到位于最南侧的总部。
以图2中的长城为例,负责守卫的四个烽火台用蓝白圆点示意,最南侧的总部用红色圆点示意。如果红色星形标示的地方出现敌情,将被哨兵们发现并沿红色折线将警报传递到总部。当然,就这个例子而言只需两个烽火台的协作,但其他位置的敌情可能需要更多。
然而反过来,即便这里的4个烽火台全部参与,依然有不能覆盖的(黄色)区域。
图 2
另外,为避免歧义,我们在这里约定,与某个烽火台的视线刚好相切的区域都认为可以被该烽火台所监视。以图3中的长城为例,若A、B、C、D点均共线,且在D点设置一处烽火台,则A、B、C以及线段BC上的任何一点都在该烽火台的监视范围之内。
图 3
好了,倘若你是秦始皇的太尉,为不致出现更多孟姜女式的悲剧,如何在保证长城安全的前提下,使消耗的民力(建造的烽火台)最少呢?
输入格式:
输入在第一行给出一个正整数
N
(3 ≤N
≤105),即刻画长城边缘的折线顶点(含起点和终点)数。随后N
行,每行给出一个顶点的x
和y
坐标,其间以空格分隔。注意顶点从南到北依次给出,第一个顶点为总部所在位置。坐标为区间[−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 分)相关推荐
- 【CCCC】L3-009 长城 (30分),计算几何+凸包,极角排序
problem L3-009 长城 (30分) 正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应 ...
- L3-009 长城 (30分)
L3-009 长城 (30分) #include <bits/stdc++.h> //#define int ll using namespace std;//#pragma GCC op ...
- L3-009 长城 (30 分)-PAT 团体程序设计天梯赛 GPLT
正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅 ...
- L3-009 长城 (30分):几何数学
正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅 ...
- 2006年3月11日下午15点30分左右 偶的BLOG终于上路了^_^
标记一下,终于建了自己的BLOG,感觉真好,今天是周六,公司还要上班,但自己的博客在此时此地诞生,还是值得高兴的.
- 解决python时间戳最大为3001年1月1日15时59分59秒的问题
自己写个python函数解决python时间戳最大为3001年1月1日15时59分59秒的问题 今天碰到一个情况,在oracle查数,某个数的值是个时间值,而且是9999年12月31日,然后pytho ...
- 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 ...
- CCF201409-5 拼图(30分)
试题编号: 201409-5 试题名称: 拼图 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个n×m的方格图,现在要用如下L型的积木拼到这个图中,使得方格图正好被拼满 ...
- 7-5 公路村村通 (30 分)(C语言实现)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N) ...
最新文章
- 进制转换数据结构c语言不用栈,急求!!!用数据结构(C语言)利用栈实现十进制向二(八)进制转换,要有注释,谢谢!...
- 实验记录:vsftp整合mysql-pam管理虚拟账号
- C++ boost 实例学习
- ios逆向小试牛刀之操作手记
- Leet Code OJ 326. Power of Three [Difficulty: Easy]
- python多线程爬虫数据顺序_Python爬虫必学知识点:多线程爬虫
- java exec 关闭,Java学习之使用Runtime.exec()启动、关闭Tomcat
- Matlab 获取主板、硬盘、CPU、BIOS和网卡序列号
- 思维导图——史上最详细的计算机基础进制转换讲解
- ARM嵌入式系统开发指南-设计和优化系统软件(译作连载)
- Python代码制作“恐龙跳一跳“小游戏
- Unexpected reserved word ‘await‘
- 分析IE浏览器不能上网的原因
- 强化学习与Deep Q-Network(DQN)
- python生存曲线_生存曲线的估计方法(3):寿命表法
- paddle 图标注_化工工艺流程图,你真的弄懂了吗?
- Outlook代收发其他邮箱(gmail, qqmail, aliyun, 163)
- 计算机音乐遇见,遇见音乐 遇见爱作文
- 基于STM32的电阻、电容测量(NE555芯片RC振荡法)
- java utf8 简繁转换 类库_java简繁转换(区分港台)
热门文章
- 机器学习——方差与偏差
- Termux安装完整版Linux(Ubuntu)详细步骤
- 【论文笔记】Digital Twin in Industry: State-of-the-Art——Tao Fei
- 小程序canvas图片旋转
- php怎么兼容360浏览器,360浏览器兼容模式的页面显示不全怎么处理
- 头条号文章或者视频需要审核多久
- 科普向】Nexus 4 必读与常见问题解答【Android入门读
- 为什么适用于Python的TensorFlow正在缓慢消亡
- Android的webview有什么用,Android中webview使用的一些坑
- 颜色渐变、#16进制转RGB颜色(转Int)