日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/1/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 L3-009 长城 (30分):几何数学 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正如我們所知,中國古代長城的建造是為了抵御外敵入侵。在長城上,建造了許多烽火臺。每個烽火臺都監(jiān)視著一個特定的地區(qū)范圍。一旦某個地區(qū)有外敵入侵,值守在對應(yīng)烽火臺上的士兵就會將敵情通報給周圍的烽火臺,并迅速接力地傳遞到總部。

現(xiàn)在如圖1所示,若水平為南北方向、垂直為海拔高度方向,假設(shè)長城就是依次相聯(lián)的一系列線段,而且在此范圍內(nèi)的任一垂直線與這些線段有且僅有唯一的交點。

圖 1

進一步地,假設(shè)烽火臺只能建造在線段的端點處。我們認(rèn)為烽火臺本身是沒有高度的,每個烽火臺只負責(zé)向北方(圖1中向左)瞭望,而且一旦有外敵入侵,只要敵人與烽火臺之間未被山體遮擋,哨兵就會立即察覺。當(dāng)然,按照這一軍規(guī),對于南側(cè)的敵情各烽火臺并不負責(zé)任。一旦哨兵發(fā)現(xiàn)敵情,他就會立即以狼煙或烽火的形式,向其南方的烽火臺傳遞警報,直到位于最南側(cè)的總部。

以圖2中的長城為例,負責(zé)守衛(wèi)的四個烽火臺用藍白圓點示意,最南側(cè)的總部用紅色圓點示意。如果紅色星形標(biāo)示的地方出現(xiàn)敵情,將被哨兵們發(fā)現(xiàn)并沿紅色折線將警報傳遞到總部。當(dāng)然,就這個例子而言只需兩個烽火臺的協(xié)作,但其他位置的敵情可能需要更多。

然而反過來,即便這里的4個烽火臺全部參與,依然有不能覆蓋的(黃色)區(qū)域。

圖 2

另外,為避免歧義,我們在這里約定,與某個烽火臺的視線剛好相切的區(qū)域都認(rèn)為可以被該烽火臺所監(jiān)視。以圖3中的長城為例,若A、B、C、D點均共線,且在D點設(shè)置一處烽火臺,則A、B、C以及線段BC上的任何一點都在該烽火臺的監(jiān)視范圍之內(nèi)。

圖 3

好了,倘若你是秦始皇的太尉,為不致出現(xiàn)更多孟姜女式的悲劇,如何在保證長城安全的前提下,使消耗的民力(建造的烽火臺)最少呢?

輸入格式:
輸入在第一行給出一個正整數(shù)N(3 ≤ N ≤10
?5
?? ),即刻畫長城邊緣的折線頂點(含起點和終點)數(shù)。隨后N行,每行給出一個頂點的x和y坐標(biāo),其間以空格分隔。注意頂點從南到北依次給出,第一個頂點為總部所在位置。坐標(biāo)為區(qū)間[?10
?9
?? ,10
?9
?? )內(nèi)的整數(shù),且沒有重合點。

輸出格式:
在一行中輸出所需建造烽火臺(不含總部)的最少數(shù)目。

輸入樣例:
10
67 32
48 -49
32 53
22 -44
19 22
11 40
10 -65
-1 -23
-3 31
-7 59
輸出樣例:
2

#include <bits/stdc++.h> #define ll long long using namespace std; int book[100010]; struct point {int id;ll x,y;point operator-(point other){return point{0,x-other.x,y-other.y};}double operator^(point b){return 1.0*x*b.y-1.0*b.x*y;} }in[100010],que[100010]; bool judge(point a,point b,point c) {point ab=b-a;point ac=c-a;return (ab^ac)<=0; } int main() {int n,ans=0;cin>>n;for(int i=0;i<n;i++){in[i].id=i+1;cin>>in[i].x>>in[i].y;}int flag=0;for(int i=0;i<n;i++){while(flag>1&&judge(que[flag-2],que[flag-1],in[i]))flag--;if(flag>0)book[que[flag-1].id]=1;que[flag++]=in[i];}flag=0;for(int i=2;i<=n;i++)if(book[i]==1)flag++;cout<<flag;return 0; }

總結(jié)

以上是生活随笔為你收集整理的L3-009 长城 (30分):几何数学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。