XYNUOJ 問題 G 火力覆蓋

2021-08-04 20:12:11 字數 1272 閱讀 3136

時間限制: 1 sec  

記憶體限制: 128 mb

提交: 20  

解決: 12 [

提交][

狀態][

討論版]

朱日和基地某次演習中,藍軍某火炮部隊奉命對某長方形目標區域進行飽和打擊。目標區域橫向長w,縱向長h,軍用衛星在它的橫向中心線上不同位置處標記有n(n<=10000)個目標打擊點,每個打擊點i有對應不同型號的火炮負責打擊,打擊效果是讓以打擊點為中心半徑為ri的圓被火力覆蓋。請選擇盡量少的目標打擊點,使整塊目標區域被火力覆蓋。

第一行輸入乙個正整數

n表示共有n次測試資料。

每一組測試資料的第一行有三個整數

n,w,h,n表示共有n個目標打擊點,w表示目標區域的橫向長度,h表示目標區域的縱向長度。

隨後的n行,都有兩個整數xi和ri,xi表示第i個目標打擊點的的橫座標(最左邊為0),ri表示該目標打擊點能火力覆蓋的圓的半徑

每組測試資料輸出乙個正整數,表示共需要多少個目標打擊點,每個輸出單獨佔一行。

如果不存在一種能夠把整個目標區域火力覆蓋的方案,請輸出

0。

2
2 8 6
1 1
4 5
2 10 6
4 

5

6 5
1
2
提示

#include#include#includeusing namespace std;

struct node

a[10050];

bool cmp(node a,node b)

int main()

}if(cnt==0)

sort(a,a+cnt,cmp);

if(a[0].s>0)//最靠前的目標打擊點的起始範圍大於0,就說明不可能全部覆蓋

double max=0,begin=0,end=0;

int ans=0;//完成覆蓋共採用多少線段

for(i=0;imax&&a[j].e>end&&a[j].s<=end)

//核心語句

//在剩下的線段中找出所有左端點小於等於當前已經覆蓋到的區域的右界限end的線段中,

//右端點最大的線段,將其加入,直到覆蓋全部的區域。

}end=max;//採用,並記錄

max=0;

ans++;

}if(end>w) //此時當前已覆蓋到的區域已經大於區間長度了,完成目標,結束操作

break;

}if(end

XYNUOJ 棋盤覆蓋

時間限制 3 sec 記憶體限制 64 mb 提交 狀態 討論版 在乙個2k 2k 1 k 100 的棋盤中恰有一方格被覆蓋,如圖1 k 2時 現用一缺角的2 2方格 圖2為其中缺右下角的乙個 去覆蓋2k 2k未被覆蓋過的方格,求需要類似圖2方格總的個數s。如k 1時,s 1 k 2時,s 5圖1 ...

xynuoj迷宮問題

時間限制 1 sec 記憶體限制 128 mb 提交 狀態 討論版 設有乙個n n方格的迷宮,入口和出口分別在左上角和右上角。迷宮格仔中分別放有0和1,0表示可通,1表示不能,迷宮走的規則如下圖所示 即從某點開始,有八個方向可走,前進方格中數字為0時表示可通過,為1時表示不可通過,要另找路徑。找出一...

XYNUOJ過河問題

時間限制 1 sec 記憶體限制 64 mb 提交 19 解決 11 您該題的狀態 已完成 在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要...