其實(shí)也談不上推薦,只是自己做過(guò)的題目而已,甚至有的題目尚未AC,讓在掙扎中。之所以推薦計(jì)算幾何題,是因?yàn)?,本人感覺(jué)ACM各種算法中計(jì)算幾何算是比較實(shí)際的算法,在很多領(lǐng)域有著重要的用途(例如本人的專(zhuān)業(yè),GIS)。以后若有機(jī)會(huì),我會(huì)補(bǔ)充、完善這個(gè)列表。

計(jì)算幾何題的特點(diǎn)與做題要領(lǐng):
1.大部分不會(huì)很難,少部分題目思路很巧妙
2.做計(jì)算幾何題目,模板很重要,模板必須高度可靠。
3.要注意代碼的組織,因?yàn)橛?jì)算幾何的題目很容易上兩百行代碼,里面大部分是模板。如果代碼一片混亂,那么會(huì)嚴(yán)重影響做題正確率。
4.注意精度控制。
5.能用整數(shù)的地方盡量用整數(shù),要想到擴(kuò)大數(shù)據(jù)的方法(擴(kuò)大一倍,或擴(kuò)大sqrt2)。因?yàn)檎麛?shù)不用考慮浮點(diǎn)誤差,而且運(yùn)算比浮點(diǎn)快。

一。點(diǎn),線(xiàn),面,形基本關(guān)系,點(diǎn)積叉積的理解

POJ 2318 TOYS(推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2318
POJ 2398 Toy Storage(推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2398
一個(gè)矩形,有被若干直線(xiàn)分成N個(gè)格子,給出一個(gè)點(diǎn)的坐標(biāo),問(wèn)你該點(diǎn)位于哪個(gè)點(diǎn)中。
知識(shí)點(diǎn):其實(shí)就是點(diǎn)在凸四邊形內(nèi)的判斷,若利用叉積的性質(zhì),可以二分求解。

POJ 3304 Segments
http://acm.pku.edu.cn/JudgeOnline/problem?id=3304
知識(shí)點(diǎn):線(xiàn)段與直線(xiàn)相交,注意枚舉時(shí)重合點(diǎn)的處理

POJ 1269 Intersecting Lines
http://acm.pku.edu.cn/JudgeOnline/problem?id=1269
知識(shí)點(diǎn):直線(xiàn)相交判斷,求相交交點(diǎn)

POJ 1556 The Doors (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1556
知識(shí)點(diǎn):簡(jiǎn)單圖論+簡(jiǎn)單計(jì)算幾何,先求線(xiàn)段相交,然后再用Dij求最短路。

POJ 2653 Pick-up sticks
http://acm.pku.edu.cn/JudgeOnline/problem?id=2653
知識(shí)點(diǎn):還是線(xiàn)段相交判斷

POJ 1066 Treasure Hunt
http://acm.pku.edu.cn/JudgeOnline/problem?id=1066
知識(shí)點(diǎn):線(xiàn)段相交判斷,不過(guò)必須先理解“走最少的門(mén)”是怎么一回事。

POJ 1410 Intersection
http://acm.pku.edu.cn/JudgeOnline/problem?id=1410
知識(shí)點(diǎn):線(xiàn)段與矩形相交。正確理解題意中相交的定義。
詳見(jiàn):http://hi.baidu.com/novosbirsk/blog/item/68c682c67e8d1f1d9d163df0.html

POJ 1696 Space Ant (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1696
德黑蘭賽區(qū)的好題目。需要理解點(diǎn)積叉積的性質(zhì)

POJ 3347 Kadj Squares
http://acm.pku.edu.cn/JudgeOnline/problem?id=3347
本人的方法極度猥瑣。復(fù)雜的線(xiàn)段相交問(wèn)題。這個(gè)題目是計(jì)算幾何的擴(kuò)大數(shù)據(jù)運(yùn)算的典型應(yīng)用,擴(kuò)大根號(hào)2倍之后就避免了小數(shù)。

POJ 2826 An Easy Problem?! (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2826
問(wèn):兩條直線(xiàn)組成一個(gè)圖形,能容納多少雨水。很不簡(jiǎn)單的Easy Problem,要考慮所有情況。你不看discuss看看能否AC。(本人基本不能)提示一下,水是從天空垂直落下的。

POJ 1039 Pipe
http://acm.pku.edu.cn/JudgeOnline/problem?id=1039
又是線(xiàn)段與直線(xiàn)相交的判斷,再加上枚舉的思想即可。

POJ 3449 Geometric Shapes
http://acm.pku.edu.cn/JudgeOnline/problem?id=3449
判斷幾何體是否相交,不過(guò)輸入輸出很惡心。
此外,還有一個(gè)知識(shí)點(diǎn),就是給出一個(gè)正方形(邊不與軸平行)的兩個(gè)對(duì)角線(xiàn)上的頂點(diǎn),需要你求出另外兩個(gè)點(diǎn)。必須掌握其方法。

POJ 1584 A Round Peg in a Ground Hole
http://acm.pku.edu.cn/JudgeOnline/problem?id=1584
知識(shí)點(diǎn):點(diǎn)到直線(xiàn)距離,圓與多邊形相交,多邊形是否為凸

POJ 2074 Line of Sight (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2074
與視線(xiàn)問(wèn)題的解法,關(guān)鍵是求過(guò)兩點(diǎn)的直線(xiàn)方程,以及直線(xiàn)與線(xiàn)段的交點(diǎn)。數(shù)據(jù)有一個(gè)trick,要小心。

二。凸包問(wèn)題

POJ 1113 Wall
http://acm.pku.edu.cn/JudgeOnline/problem?id=1113
知識(shí)點(diǎn):赤裸裸的凸包問(wèn)題,凸包周長(zhǎng)加上圓周。

POJ 2007 Scrambled Polygon
http://acm.pku.edu.cn/JudgeOnline/problem?id=2007
知識(shí)點(diǎn):凸包,按極角序輸出方案

POJ 1873 The Fortified Forest (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1873
World Final的水題,先求凸包,然后再搜索。由于規(guī)模不大,可以使用位運(yùn)算枚舉。
詳見(jiàn):http://hi.baidu.com/novosbirsk/blog/item/333abd54c7f22c52574e0067.html

POJ 1228 Grandpa's Estate (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1228
求凸包頂點(diǎn)數(shù)目,很多人求凸包的模板是會(huì)多出點(diǎn)的,雖然求面積時(shí)能得到正確答案,但是在這個(gè)題目就會(huì)出問(wèn)題。此外,還要正確理解凸包的性質(zhì)。

POJ 3348 Cows
http://acm.pku.edu.cn/JudgeOnline/problem?id=3348
凸包面積計(jì)算

三。面積問(wèn)題,公式問(wèn)題

POJ 1654 Area
http://acm.pku.edu.cn/JudgeOnline/problem?id=1654
知識(shí)點(diǎn):利用有向面積(叉積)計(jì)算多邊形面積

POJ 1265 Area
http://acm.pku.edu.cn/JudgeOnline/problem?id=1265
POJ 2954 Triangle
http://acm.pku.edu.cn/JudgeOnline/problem?id=2954
Pick公式的應(yīng)用,多邊形與整點(diǎn)的關(guān)系。(存在一個(gè)GCD的關(guān)系)

四。半平面交

半平面交的主要應(yīng)用是判斷多邊形是否存在核,還可以解決一些與線(xiàn)性方程組可行區(qū)域相關(guān)的問(wèn)題(就是高中時(shí)的那些)。

POJ 3335 Rotating Scoreboard
http://acm.pku.edu.cn/JudgeOnline/problem?id=3335
POJ 3130 How I Mathematician Wonder What You Are!
http://acm.pku.edu.cn/JudgeOnline/problem?id=3130
POJ 1474 Video Surveillance
http://acm.pku.edu.cn/JudgeOnline/problem?id=1474
知識(shí)點(diǎn):半平面交求多邊形的核,存在性判斷

POJ 1279 Art Gallery
http://acm.pku.edu.cn/JudgeOnline/problem?id=1279
半平面交求多邊形的核,求核的面積

POJ 3525 Most Distant Point from the Sea (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3525
給出一個(gè)多邊形,求里面的一個(gè)點(diǎn),其距離離多邊形的邊界最遠(yuǎn),也就是多邊形中最大半徑圓。
可以使用半平面交+二分法解。二分這個(gè)距離,邊向內(nèi)逼近,直到達(dá)到精度。


POJ 3384 Feng Shui (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3384
半平面交實(shí)際應(yīng)用,用兩個(gè)圓覆蓋一個(gè)多邊形,問(wèn)最多能覆蓋多邊形的面積。
解法:用半平面交將多邊形的每條邊一起向“內(nèi)”推進(jìn)R,得到新的多邊形,然后求多邊形的最遠(yuǎn)兩點(diǎn)。


POJ 1755 Triathlon (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1755
半平面交判斷不等式是否有解。注意不等式在轉(zhuǎn)化時(shí)正負(fù)號(hào)的選擇,這直接影響到半平面交的方向。

POJ 2540 Hotter Colder
http://acm.pku.edu.cn/JudgeOnline/problem?id=2540
半平面交求線(xiàn)性規(guī)劃可行區(qū)域的面積。

POJ 2451 Uyuw's Concert
http://acm.pku.edu.cn/JudgeOnline/problem?id=2451
Zzy專(zhuān)為他那篇nlogn算法解決半平面交問(wèn)題的論文而出的題目。

五。計(jì)算幾何背景,實(shí)際上解題的關(guān)鍵是其他問(wèn)題(數(shù)據(jù)結(jié)構(gòu)、組合數(shù)學(xué),或者是枚舉思想)
若干道經(jīng)典的離散化+掃描線(xiàn)的題目,ACM選手必做題目

POJ 1151 Atlantis (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1151
POJ 1389 Area of Simple Polygons
http://acm.pku.edu.cn/JudgeOnline/problem?id=1389
矩形離散化,線(xiàn)段樹(shù)處理,矩形面積求交

POJ 1177 Picture (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1177
矩形離散化,線(xiàn)段樹(shù)處理,矩形交的周長(zhǎng),這個(gè)題目的數(shù)據(jù)比較強(qiáng)。線(xiàn)段樹(shù)必須高效。

POJ 3565 Ants (推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3565
計(jì)算幾何中的調(diào)整思想,有點(diǎn)像排序。要用到線(xiàn)段相交的判斷。
詳見(jiàn):http://hi.baidu.com/novosbirsk/blog/item/fb668cf0f362bec47931aae2.html


POJ 3695 Rectangles   
http://acm.pku.edu.cn/JudgeOnline/problem?id=3695
又是矩形交的面積,但是由于是多次查詢(xún),而且矩形不多,使用組合數(shù)學(xué)中的容斥原理解決之最適合。線(xiàn)段樹(shù)是通法,但是除了線(xiàn)段樹(shù),還有其他可行的方法。

POJ 2002 Squares   
http://acm.pku.edu.cn/JudgeOnline/problem?id=2002
枚舉思想,求平面上若干個(gè)點(diǎn)最多能組成多少個(gè)正方形,點(diǎn)的Hash

POJ 1434 Fill the Cisterns!(推薦)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1434
一開(kāi)始發(fā)昏了,準(zhǔn)備弄個(gè)線(xiàn)段樹(shù)。其實(shí)只是個(gè)簡(jiǎn)單的二分。


六。隨機(jī)算法
POJ 2420 A Star not a Tree?
http://acm.pku.edu.cn/JudgeOnline/problem?id=2420
多邊形的費(fèi)馬點(diǎn)。所謂費(fèi)馬點(diǎn),就是多邊形中一個(gè)點(diǎn)P,該點(diǎn)到其他點(diǎn)的距離之和最短。四邊形以上的多邊形沒(méi)有公式求費(fèi)馬點(diǎn),因此可以使用隨機(jī)化變步長(zhǎng)貪心法。
詳見(jiàn):http://hi.baidu.com/novosbirsk/blog/item/75983f138499f825dd54019b.html

七。解析幾何
這種題目本人不擅長(zhǎng),所以做得不多,模板很重要。當(dāng)然,熟練運(yùn)用叉積、點(diǎn)積的性質(zhì)還是很有用的。
POJ 1375 Intervals
http://acm.pku.edu.cn/JudgeOnline/problem?id=1375
知識(shí)點(diǎn):過(guò)圓外一點(diǎn)求與圓的切線(xiàn)

POJ 1329 Circle Through Three Points   
http://acm.pku.edu.cn/JudgeOnline/problem?id=1329
求三角形外接圓

POJ 2354 Titanic
http://acm.pku.edu.cn/JudgeOnline/problem?id=2354
求球面上兩個(gè)點(diǎn)的距離,而且給的是地理經(jīng)緯坐標(biāo)。

POJ 1106 Transmitters
http://acm.pku.edu.cn/JudgeOnline/problem?id=1106
角度排序,知道斜率求角度,使用atan函數(shù)。

POJ 1673 EXOCENTER OF A TRIANGLE
http://acm.pku.edu.cn/JudgeOnline/problem?id=1673
可以轉(zhuǎn)化為三角形的垂心問(wèn)題。

八。旋轉(zhuǎn)卡殼

POJ 2187 Beauty Contest
http://acm.pku.edu.cn/JudgeOnline/problem?id=2187
凸包求最遠(yuǎn)點(diǎn)對(duì)。可以暴力枚舉,也可以使用旋轉(zhuǎn)卡殼。

POJ 3608 Bridge Across Islands(難)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3608
兩個(gè)凸包的最近距離。本人的卡殼始終WA。郁悶。

九。其他問(wèn)題
POJ 1981 Circle and Points
http://acm.pku.edu.cn/JudgeOnline/problem?id=1981
求單位圓最多能覆蓋平面上多少個(gè)點(diǎn)