專題學習——計算幾何
基本的叉積、點積和凸包等東西就不多說什麼了,網上一搜一大堆,切一些題目基本熟悉了就差不多了。
接下來,研究了半平面交,思想方法看07年朱澤園的國家隊論文,模板程式碼參考自我校大牛韜哥:
一些半平面交的題目:
POJ 3525 Most Distant Point from the Sea (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3525
給出一個多邊形,求裡面的一個點,其距離離多邊形的邊界最遠,也就是多邊形中最大半徑圓。
解法:可以使用半平面交+二分法解。二分這個距離,邊向內逼近,直到達到精度。
POJ 3384 Feng Shui (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3384
半平面交實際應用,用兩個圓覆蓋一個多邊形,問最多能覆蓋多邊形的面積。
解法:用半平面交將多邊形的每條邊一起向“內”推進R,得到新的多邊形,然後求多邊形的最遠兩點。
(以上題目來自別人的blog,後面還有幾題是我自己找到的)
座標旋轉題目切得不多
一些旋轉卡殼的題目
POJ 2079 Triangle
http://poj.org/problem?id=2079
這題以為O(N^2)的複雜度會超時,結果就是O(N^2)複雜度
然後看了一些掃描線之類的東西。
推薦幾道比不錯的題目:
下面看了一些隨機演算法:(08年顧研論文-《淺談隨機化思想在幾何問題中的應用》)
(1)隨機增量法:這個演算法很犀利啊,把一些計算幾何的問題降了一個n複雜度。(典型的有最小圓覆蓋)
網上找了最小圓覆蓋的隨機增量演算法,裡面程式碼倒是不錯,就是解釋的不是很清楚,推薦看《計算幾何演算法與應用(第3版)》(鄧俊輝譯,清華大學出版社出版)中第91頁“4.7最小包圍圓”這個章節中的內容,比較詳細也很清楚,程式碼我參考了這個blog的
(2)模擬退火:參考顧研論文
模擬退火的題目:
POJ 3285 Point of view in Flatland
http://poj.org/problem?id=3285
這題的難點在於找到合適的評估函式,當然這題也可以通過解方程組來做
POJ 2600 Geometrical dreams
http://poj.org/problem?id=2600
這題不是模擬退火的題,但是可以用模擬退火過。非模擬退火的方法也不難
解析幾何,平面最近點對,。。。這些搞得也不是很深入。
兩道題目
圓的面積並和交,詳細可以看AekdyCoin大牛的blog
題目:
凸多邊形的面積並
先看了AC大牛的blog學會了O(N^3)的方法,後來在做Codeforces的時候發現有O(N^2*logN)的方法,而且也不繁瑣
Codeforces Round #83 DIV1 的 E題用O(N^3)的方法過不掉第49組資料,然後研究了其他大牛的凸多邊形交的程式碼
先是看了dagon的程式碼發現其實他的程式碼有問題,Codeforces的資料居然沒有查出來。然後看了syntax_error的程式碼,
發現他是用類似梯形剖分的方法做的,複雜度O(N^2*logN),果斷就學習了
有一類題目是給出一些點,並告訴你哪些點之間有連線,並且這些連線段之間除端點之外沒有其他交點(有時候這些線段是要自己處理出來的)。
然後題目要你求
1 每小塊多邊形的面積
2 有多少個K多邊形內部不含點和線段
3 這些線段圍成的圖形的輪廓線
這類題目的方法都差不多,在很多大牛的blog裡都可以找到類似的方法。
題目:
三維幾何
網上有關三維幾何的內容很少阿,程式碼和題目基本都不怎麼能搜到,我也就切了不多的幾題
前面座標旋轉裡的兩到題:
其他一些題目:
HDU 3644 A Chocolate Manufacturer’s Problem (2010杭州網路賽)
http://acm.hdu.edu.cn/showproblem.php?pid=3644
本來想用模擬退火水一下的,結果徘徊於WA和TLE之間無法AC