解題思路:其實就是把圓的左右兩端記錄下來,然後沿x軸從左到右進行掃瞄,掃到圓的左端點時,則判斷其是否被其他圓包含,如果不被包含就加入set中維護,到碰到圓的右端點時,就從set中刪除左端點。但做的時候調了一些時間,發現有個以前沒注意到的語法問題。網上的版本都是用pair進行資料組合的,這樣排序的時候就會預設先以first進行排,first一樣時就按second的大小排序。而我用結構體,只按first進行排序會出錯。但為什麼在x一樣的情況下還要用id來進行排序呢?主要還是因為用了lower_bound這個函式,不把id也排序,則在x相同時id是出於無序狀態的。
#include#include#include#include#includeusing namespace std;
double ax[40009],ay[40009],ar[40009];
struct node
node(double x,int id):x(x),id(id)
};struct node2
node2(double y,int id):id(id),y(y)
};bool operator<(const node2 &a,const node2 &b)
int main()
else
}sort(p.begin(),p.end());
printf("%d\n",p.size());
for(int i=0;iprintf("%d%c",p[i]+1,i+1==p.size()?'\n':' ');
}}
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...
POJ 2932 掃瞄線思想
這個題確實太神奇了 大意就是給出了n個互不相交的圓。各個圓之間有可能乙個完全包含了另乙個。這裡包含就是乙個圓整個都被另乙個圓圈再裡面。現在求那些沒有被包含的圓的序號。資料量是4w 所以n2的肯定不行。苦思冥想,不得其解 看了這個之後不由得大呼資料結構之博大精深 大意就是類似於我們經常用的那種掃瞄線,...