poj2932 掃瞄線 平面幾何

2022-04-13 18:06:20 字數 752 閱讀 5761

挑戰程式設計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[ids],ids));//找到離y[ids]最近的下面的一點圓心

//檢查上下兩側y座標距離最近的兩個圓 檢查他們是否和ids這個當前圓的包含情況

if(it!=outers.end()&&inside(ids,it->second)) continue; //兩個圓有相包含(inside函式) 而且這個y座標最近的圓和 outers.end()不是同乙個圓則不滿足題意

//如果兩個圓不相包含或者和outers.end()是同乙個圓心,因為同乙個圓

if(it!=outers.begin()&&inside(ids,(--it)->second)) continue;

res.push_back(ids);

outers.insert(make_pair(y[ids],ids)); //outers是有順序的

}else //掃瞄到圓的右端

outers.erase(make_pair(y[ids],ids));

}

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 計算幾何平面掃瞄)

解題思路 其實就是把圓的左右兩端記錄下來,然後沿x軸從左到右進行掃瞄,掃到圓的左端點時,則判斷其是否被其他圓包含,如果不被包含就加入set中維護,到碰到圓的右端點時,就從set中刪除左端點。但做的時候調了一些時間,發現有個以前沒注意到的語法問題。網上的版本都是用pair進行資料組合的,這樣排序的時候...

POJ 2932 掃瞄線思想

這個題確實太神奇了 大意就是給出了n個互不相交的圓。各個圓之間有可能乙個完全包含了另乙個。這裡包含就是乙個圓整個都被另乙個圓圈再裡面。現在求那些沒有被包含的圓的序號。資料量是4w 所以n2的肯定不行。苦思冥想,不得其解 看了這個之後不由得大呼資料結構之博大精深 大意就是類似於我們經常用的那種掃瞄線,...