POJ 2932 掃瞄線思想

2021-06-09 07:25:45 字數 556 閱讀 7356

這個題確實太神奇了

大意就是給出了n個互不相交的圓。 各個圓之間有可能乙個完全包含了另乙個。這裡包含就是乙個圓整個都被另乙個圓圈再裡面。

現在求那些沒有被包含的圓的序號。

資料量是4w

所以n2的肯定不行。

苦思冥想,不得其解

看了這個之後不由得大呼資料結構之博大精深

大意就是類似於我們經常用的那種掃瞄線,只不過這裡是圓。

每個圓有最左邊的點和最右邊的點。我們就是從左到右按順序把這些點掃一遍。

掃的過程中呢,如果掃到了乙個圓的左端點,那麼就要看這個圓是否被包含了,如果沒被包含,就加入我們設計的資料結構中。那麼怎麼判斷有沒有被包含了呢,最裸的想法是看是否被之前資料結構中的圓包含。實際上只需要跟資料結構中跟自己圓心縱座標相近的上下兩個圓來判斷即可了,因為此時我們設計的資料結構中一定都是一些互不包含的一些圓,如果新進的這個圓被包含了,那麼那個包含它的圓必然在其相鄰的地方。

如果掃到了乙個圓得右端點呢,就要把這個圓刪除掉了,因為再往後的圓不會跟它發生關係了。

根據這個能插入,能刪除,能找相鄰的條件,可以發現,用set 來實現是再好不過了。

POJ 2932 圓掃瞄線

求n個圓中沒有被包含的圓。模仿掃瞄線從左往右掃,到左邊界此時如有3個交點,則有3種情況,以此判定該圓是否被離它最近的圓包含,而交點和最近的圓可以用以y高度排序的set來維護。因此每次到左邊界插入該圓,找該圓最近的兩個圓 上方和下方 判斷是否包含,到右邊界則從set中刪除該圓。date 2017 08...

poj2932 掃瞄線 平面幾何

挑戰程式設計p258 將圓的x左邊左端和右端儲存起來 for int i 0 i排序 sort events.begin events.end 判斷 在本題中圓只有兩種情況 包含與不包含 for int i 0 i iterator it outers.lower bound make pair y...

poj2932 掃瞄線 平面幾何

挑戰程式設計p258 將圓的x左邊左端和右端儲存起來 for int i 0 i排序 sort events.begin events.end 判斷 在本題中圓只有兩種情況 包含與不包含 for int i 0 i iterator it outers.lower bound make pair y...