cccc初赛 L3-003 长城

L3-009. 长城

时间限制

400 ms

内存限制

65536 kB

代码长度限制

8000 B

判题程序

Standard

作者

邓俊辉

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

现在如图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

解题思路:

  用一个堆栈维护司令部看到当前点所必须的烽火台编号。

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 using namespace std;
 6 #define maxn 100005
 7 int n;
 8 typedef long long ll;
 9 struct point{
10     ll x;
11     ll y;
12 } p[maxn];
13 int S[maxn];
14 int vis[maxn];
15 bool judge(point &p1,point &p2,point &p3){
16     return (p2.y-p3.y)*(p1.x-p3.x)>(p1.y-p3.y)*(p2.x-p3.x);
17 }
18 int main(int argc, const char * argv[]) {
19     scanf("%d",&n);
20     for(int i=0;i<n;i++)
21         scanf("%lld%lld",&p[i].x,&p[i].y);
22     S[0]=0;
23     int ptr=1;
24     int cnt=0;
25     for(int i=1;i<n;i++){
26         if(ptr>=2){
27             while(ptr>1&&!judge(p[S[ptr-2]],p[S[ptr-1]],p[i])) {
28                 ptr--;
29             }
30             vis[S[ptr-1]]=1;
31         }
32         S[ptr++]=i;
33     }
34     for(int i=1;i<n;i++) if(vis[i]) cnt++;
35     cout<<cnt<<endl;
36     return 0;
37 }
时间: 2024-10-09 15:52:19

cccc初赛 L3-003 长城的相关文章

CCCC 以及 hihocoder offer收割赛11 ~~~

CCCC  真的很蒙  ,没有队服,没有狗牌,服务器崩溃到14:10  才开始比赛...(黑人问号 开始前,发现旁边是西交老大吴航,mad~各种紧张.看着大佬疯狂的敲宏定义就很怕啊.100多行,一行头文件,剩下的全是宏.... 然后忐忑的开始比赛,,,瞄了一眼周围的人都在写L2 L3.我默默地打开了L1...... 然后!!!!! 发现键盘按键是反的(打a出b,打b出a的那种),跟工作人员反应后,被告知设备老师不在 QAQ,然后又是手速场,特别怕自己敲不完题. 但是剩下最后一个半小时左右的时候已

【百度之星2014~初赛(第二轮)解题报告】Chess

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]Chess>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=667 前言 最近要毕业了,有半年没做

水长城

周六说走就走的水长城,跟小美.儿子我们赶早出发,一路畅通,一个多小时之后的九点多我们到达目的地,停车场里特别空旷,以至于给我们一种没有对外开放的假象. 我来这是第二次,上次来的时候整个景区郁郁葱葱,生气盎然给我留下美好印象,今天来这也是我的强烈推荐,当打开车门感受到外面的阵阵凉风,不知小美是如何的心情,现在显然不是最佳时节. 她公司办的公园年票在这里发挥作用,给儿子买了一张半价门票,我们三检票开启参观之旅. 水长城里一共设计了三条参观路线,上次公司团建时我们选择的是强生健体游,一条围着灏明湖盘山

Freescale L3.14.52_1.1.0 yocto build

1. Refer to<Freescale_Yocto_Project_User's Guide.pdf>,该文档需对应L3.14.52_1.1.0 5.6.5 Restarting a build environment:如果新的终端被打开或者是machine重启,那么需要参照这个 执行$build-x11 bitbake fsl-image-gui时候, 报错: OE-core's config sanity checker detected a potential misconfigur

动态规划-hdoj-4832-百度之星2014初赛第二场

Chess Problem Description 小度和小良近期又迷上了下棋.棋盘一共同拥有N行M列,我们能够把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字路线.也就是说,假设"王"当前在(x,y)点,小度在下一步能够移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2) 这八个点中的随意一个. 小度觉

长城防火墙(GFW)

一.简介 中国防火长城,官方名为金盾工程,是由政府运作的一个互联网审查监控项目.在其管辖互联网内部建立的多套网络审查系统的总称,包括相关行政审查系统.其英文名称Great Firewall of China(与长城 Great Wall 相谐的效果),简写为Great Firewall,缩写GFW.随着使用的广泛,GFW已被用于动词,GFWed是指被防火长城所屏蔽.   二.技术详解 http://lusongsong.com/reed/801.html

Noip2008提高组初赛 C

第十四届(NOIP2008)信息学奥赛联赛提高组C语言初赛试题 ● ●  全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效  ●● 一. 单项选择题 (共10题,每题1.5分,共计15分.每题有且仅有一个正确答案). 1. 在以下各项中,(C  )不是操作系统软件. A. Solaris   B. Linux    C. Sybase     D. Windows Vista      E. Symbian A:索拉瑞斯是Sun Microsystems研发的计算机操作系统.它被认为是UNI

NOIP2013-普及组初赛C语言解析

第十九届全国青少年信息学奥林匹克联赛初赛 一.单项选择题(共 20 题,每题 1.5 分,共计 30 分.每题有且仅有一个正确选项)1. 一个 32 位整型变量占用(A )个字节.A. 4 B. 8 C. 32 D. 128 参考:一个int变量占4个字节,对于16字机,short int 占2个字节,在大多数的32位机中,short int 占4个字节.但总的来说,short int 至少16位,也就是2个字节,long int或long ,在内存中占4个字节.故选A /===========

计蒜之道2015程序设计大赛初赛第一场——搜狗输入法的分词算法

(一)题面 计蒜之道2015程序设计大赛初赛第一场——搜狗输入法的分词算法 搜狗输入法最近的用户输入中出现了一种新的输入模式,形如 “0k1234567”,搜狗的工程师发现这一模式后了解到,这是一种新被提出的对于十五进制数字的标记模式,其中 “0k” 是标记进制为15的前缀标记,之后的部分 “1234567” 是实际的十五进制的数字串. 在发现这一标记模式后,搜狗的工程师开始尝试在已有的分词算法上进一步加入对于十五进制数字串的处理,把网页上的这种形式的 15 进制数正确地提取出来.我们知道,标记