ACM计算几何题目推荐及做题统计

先前这个是放在首页的,现在结束了就把它挪到这里了,也算是对之前过程的一个留念吧。

今天发现自己计算几何的刷题量还是太少,所以决定将首页拿出来作为自己计算几何刷题进度的一个展示板,欢迎大家前来监督。

以下内容从各博客中复制过来,如果这道题目我刷过了,我会打上一个Accept,并把它的排版错位之类的问题整理一下。不能就让它这么放着呀。

所以说,页面越乱,证明我刷的题越少。


来自:计算几何题目分类+简单解释 - 小媛在努力~ - 博客频道 - CSDN.NET

两个斜杠是已经过的题,四个斜杠的是在ZOJ,POJ都有的题。
  • 三维凸包
  • Acceptpoj 3528 Acceptpoj 2974
    Accepthdu 3662 Accepthdu 4266

    Accept//ECNU 1624 求交集多边形面积 求俩凸多边形面积。水题。可用半平面交,也可以自己YY做。
    poj 1259 最大内部凸包
    Accepthdu 3644 多边形内能放进最大圆半径(可能是凹的,二分+判断)
    Accept//hdu 1086
    //hdu 3982 半平面交+求凸多边形和圆的面积交
    //hdu 4063 注意判断线段是否被圆覆盖的方法,可以分为一小段一小段判断,也可以整体根据左圆右端点比右圆左端点靠右(靠下)判断
    卡壳
  • hdu
  • Accept//3629
  • fzu
  • //1973
  • UVA
    • //681 找凸包,水题
    • //634 判断点是否在多边形内
    • //11626 给你凸包的点(无序),按逆时针排序,内点排序即可
    • //109 同 POJ1264
    • //10002 求凸多边形的质心
    • //218 水题,求凸包的点还有输出总边长
    • //10173 旋转卡壳求凸包最小外接矩形
    • //11096 求凸包周长,水题
    • //10088 求多边形内点个数
    • //10065 多边形面积
    • //10652 凸包面积矩形面积
    • //361 凸包解在所有三角形内
    • Accept//191 同poj1410
    • //478 判断点是否在圆,矩形,三角形内
    • //477 比478就少了个判断在三角形内
    • //476 就判断个在矩形内
    • //10078 判断多边形是否为凸包
    • //10060 给你一些钢板的形状(凸凹不限),还有厚度,给你圆井盖的半径和厚度,问你可以覆盖掉多少个井。
    • //190 POJ1329
    • //356 圆能覆盖的格子数和边界穿过的格子数
    • //10678 求椭圆面积
    • //10991 三角形面积-三个扇形面积即可
    • //143 求三角形整点个数,白皮书上的题
    • //10522 已知三角形的三高长,求面积
    • //11854 判断三角形是否为直角三角形
    • //10347 已知三角形三条中线长度求三角形面积
    • //11455 水题,判断三角形***********
    • //10577 同zoj1892
    • //10005 最小圆覆盖求半径
    • //11345 求多个矩形并
    • //10242 已知平行四边形三个点求另一个点。注意三点位置关系,样例都是连起来的,可能中间俩点不等。。
    • //11817 求大地坐标 球面距离还有直线距离之差
    • //10167 A B 要求是整数,直接枚举
    • //10897 给经纬度求 Great-Circle Distance
    • //10316 求在哪个飞机场建造个HUB使得所有飞机场到这个HUB最长距离最短。
    • //10075 大地坐标转换求距离,然后floyd,注意求floyd之前的距离也要先四舍五入
  • ural
    • Accept //ural 1020 周长+圆周长
    • Accept //ural 1052 找最多点共线
    • Accept //ural 1084 求固定半径的圆 和 固定长度矩形相交面积(圆和矩形同一个中心)
    • Accept //ural 1207 把点分成相等的两部分 极角排序
    • Accept //ural 1348 求点到直线最远最近点
    • Accept //ural 1159 二分半径,注意所有点都在圆某条直径的特殊情况
    • Accept //ural 1489 三维转二维,细节注意下就OK
    • Accept ural 1572 给定一个形状的尺寸(圆,正方形,等边三角形),求能放进其他形状(输入)最多的个数
  • zoj
    • //1010
    • //1032
    • //1037
    • //1041
    • //1081
    • //1090
    • //1104 二分抛物线二次项系数即可
    • 1123
    • //1128 矩形面积并
    • //1139
    • //1158 直接枚举围墙的中点,求与墙的最多交点个数即可。
    • 1165 看不懂
    • 1185
    • //1199 两圆公切线交点,根据等比关系
    • //1247 按给的方向走,输入稍微麻烦点
    • //1248 判断一个多边形是否有核,半平面交,判断交后多边形的点的个数是否为0。
    • //1280
    • 1289
    • //1309 求点和圆的切线,然后排序验证是否和圆相交即可
    • 1357
    • 1369
    • //1377
    • 1426 判断100条线段相交形成多少个矩形
    • //1439
    • //1450 最小圆覆盖,随机增量方法
    • Accept//1453
    • //1460 切蛋糕,问切成多少块,欧拉定理,注意输入数据很阴险,有重边,而且切痕端点不一定都在蛋糕边缘。。
    • //1465
    • //1469 求多边形核的面积,半平面交即可。
    • //1472 圆和矩形 圆和圆 矩形和矩形 是否相交 相切也算,注意题目输入T T
    • 1491
    • 1550 面??
    • 1580 1000个点 问你最多组成多少个直角三角形
    • //1597
    • //1608 两个圆是否能放进一个矩形
    • //1648
    • 1650 给四条线段的长度,求围成最大区域面积
    • 1662
    • 1683
    • 1696 N个圆 问最后能看到的能有几个
    • //1704 给你一些点,找到一个三角形的面积最大,而且其他点都不在这个三角形里面(上)
    • 1739 求多边形覆盖掉的块块的面积
    • 1821
    • //1860 水题,比较长度。
    • //1868 大圆求距离最大值最小,枚举下就好
    • //1892 给你正多边形的三个点,求包围它的最小矩形面积(矩形长宽必须平行于x或y)
    • //1910
    • //1943 大地坐标求距离,用map很方便
    • //1973 给出多边形N个顶点,求出所有边的中点
    • //1974 给出多边形N个中点,求出顶点。偶数边是不唯一的,题目给的奇数边
    • //1996
    • 1999
    • //2010 判断一个矩形是否可以放进另一个矩形里(可以斜放),离散化
    • //2015 求多边形重心
    • 2062 给出N个点的多边形,求一射线使得和最多的边相交(射线不能在多边形内部)。
    • 2102 给你一条棍子坐标和几个圆桌子的坐标,判断棍子是否能掉下来
    • //2107
    • 2137
    • //2157 给你多边形的几个点,求周长
    • //2167 求单位圆最多覆盖点数,求每个点形成的单位圆覆盖最多次数的弧即可
    • 2171
    • 2228
    • 2234 给出一个三角形区域和一根绳长,求绳长在三角形区域里围成的最大面积
    • 2318 给出一艘圆形的船,问是否可以逃出很多圆构成的群岛
    • 2335 画出三个圆,每个圆只能一次画成,求最少画的时间
    • //2347 给出1000个点,求这1000个点能组成多少个正方形
    • //2352
    • 2361 许多线构成闭合区域的面积(可能构成多块区域,输出每一块的面积)
    • //2370 给出弓形的弦长和弧长,求弓形的高
    • 2375
    • 2394
    • //2403 可以找规律,可以模拟
    • //2419 给你5W个点,求三点能组成最大三角形的面积,旋转卡壳,引用大黄题解 O(n) 的旋转卡壳,先凸包,然后选取开头三个点 p,q,r 开始旋转,注意 r 不超过第一个点,q 不超过 r,p 不超过 q 。每次做三次推进,先推进 r,使 pq 不动面积最大,然后推进 q,再推进 p,如果三次都没有推进过,r 推进一格。每次推进完一个点都更新一下面积最大值。
    • 2428
    • //2459 给出四面体的六条楞,求体积,欧拉四面体公式 poj2208用这个公式死活过不了
    • 2503 积分。。
    • 2518 求椭圆柱侧面积最小面积读不懂
    • 2519
    • 2525
    • 2556
    • //2551
    • 2568
    • //2589 欧拉定理,求N个圆相交后的面数
    • 2623 求两个多边形的并的面积,三角剖分?
    • 2629 求最多覆盖多少个圆
    • 2637
    • 2675
    • 2713
    • 2716
    • 2718
    • //2747 求颜色不同的矩形覆盖后剩下多少种颜色的矩形,并且求出来面积。
    • 2748
    • //2820 判断是否有核,半平面交
    • 2825
    • 2854
    • //2870 判断是否存在一条直线和所有线段有至少一个交点
    • 2959 0AC的神题。。
    • //2978 同2167
    • 2983
    • 2993
    • 3012
    • //3521 扫描线+并查集
  • poj
    • 1031 Fence
    • Accept//1039 Pipe
    • Accept////1066
    • 1092 Farmland
    • Accept////1106 Transmitters
    • Accept////1113 Wall
    • ////1118 Lining Up
    • 1133 Stars
    • Accept1151 Atlantis
    • 1225 STRICTLY INSCRIBED SIMILAR TRIANGLES
    • 1259 The Picnic
    • 1263 Reflections
    • // 1264 凸包+判断点是否在多边形内+多边形面积
    • //1265 Area
    • Accept1266 Cover an Arc.
    • Accept////1269 Intersecting Lines
    • Accept//1271 Nice Milk 半平面交
    • Accept////1279 Art Gallery
    • ////1288
    • 1294 Not Too Convex Hull
    • 1319 Pipe Fitters
    • Accept////1329
    • 1347 Triangle
    • 1361 JaWs
    • Accept////1375 Intervals
    • Accept//1379 Run Away
    • ////1380
    • ////1385
    • Accept//1389 Area of Simple Polygons
    • 1408 Fishnet
    • Accept//1410 Intersection 线段和矩形相交,注意题意
    • //1418 Viva Confetti 求圆和圆相交的交点,然后计算交点在某个圆内,按极角排序在同一个圆周上的点(记得去重),然后计算每小段弧的中点,然后看这个中点在几个圆盘里,记录这个点和对应的id(可以记成一个点一个id)。最后扫一遍中点,未被遮住的就算到答案里。 另外需要特殊处理的就是,如果一个盘盘未被覆盖,就是它是完整的,或者它完全被覆盖,这样的话计算交点是算不出来的,需要特判。
    • 1428 Hermes’ Colony
    • Accept1434 Fill the Cisterns!
    • 1444 Parallelepiped walk
    • ////1468
    • 1471 Triangles
    • ////1473 There’s Treasure Everywhere!
    • ////1474
    • 1494 Sunrise
    • 1499 Supercomputer Selection, The Sequel
    • 1500 Polygonal Puzzle
    • 1514 Metal Cutting
    • 1518 Problem Bee
    • 1536 Trains
    • Accept//1556 The Doors
    • ////1569 Myacm Triangles
    • Accept1584 A Round Peg in a Ground Hole
    • 1586 Three Sides Make a Triangle
    • 1605 Horse Shoe Scoring
    • 1610 Quad Trees
    • 1623 Squadtrees
    • 1624 This Takes the Cake
    • 1645 BSP Trees
    • Accept////1654 Area
    • 1660 Princess FroG
    • Accept1673 EXOCENTER OF A TRIANGLE
    • 1685 Color Tunnels
    • 1687 Buggy Sat
    • 1688 Dolphin Pool
    • 1693 Counting Rectangles
    • Accept1696 Space Ant
    • 1727 Advanced Causal Measurements (ACM)
    • 1758 Frontier
    • 1765 November Rain
    • 1774 Fold Paper Strips
    • ////1788
    • 1803 Box Art
    • 1810 Covering
    • 1813 Overlapped Shapes
    • 1819 Disks
    • 1834 线段处理
    • 1843 Shire
    • 1851 Map
    • 1871 Bullet Hole
    • Accept1873 The Fortified Forest
    • 1875 Robot
    • 1877 Flooded!
    • 1881 Sail Race
    • 1899 Farmer Bill’s Problem
    • 1902 Illumination
    • ////1905
    • 1912 A highway and the seven dwarfs
    • 1921 Paper Cut
    • 1927 Area in Triangle
    • 1931 Biometrics
    • 1937 Balanced Food
    • ////1939 Diplomatic License
    • ////1940 Polygon Programming with Ease
    • 1956 Pumps and Pipes
    • 1971 Parallelogram Counting
    • ////1981 Circle and Points
    • 1982 Water Tank
    • Accept////2002
    • Accept////2007 Scrambled Polygon
    • 2012 Triangle Cuts
    • 2016 Ink Blots
    • 2026 As the Crow Flies
    • 2031 Building a Space Station
    • 2036 I Conduit!
    • 2043 Area of Polygons
    • 2048 Monster Trap
    • 2053 Square
    • 2066 Minimax Triangulation
    • Accept2069 Super Star 最小覆盖球
    • Accept2074 Line of Sight
    • Accept////2079 Triangle
    • 2087 Petanque
    • 2098 Ellipse
    • 2130 Jogging
    • 2149 Inherit the Spheres
    • 2150 Crossing Prisms
    • 2164 Find the Border
    • 2165 Gunman
    • 2172 Bricks
    • 2177 Ghost Busters
    • Accept////2187
    • 2284 That Nice Euler Circuit
    • Accept////2318
    • Accept//2354 大地坐标系求球面距离
    • Accept////2398
    • ///2504 同zoj1892
    • Accept//2546 求两圆相交面积
    • ////2606
    • ////2610
    • 2621 Parallelepiped
    • 2622 Convex hull
    • Accept//2653
    • 2686 Traveling by Stagecoach
    • 2687 Earth Observation with a Mobile Robot Team
    • 2747 Shy Polygons
    • ////2780
    • 2839 Convex Hull and Triangle
    • 2932 Coneology
    • 2954 Triangle
    • 3011 Secrets in Shadows
    • 3129 How I Wonder What You Are!
    • Accept//3130 How I Mathematician Wonder What You Are! 判断是否有核,半平面交
    • 3135 Polygons on the Grid
    • 3334 Connected Gheeves
    • Accept//3335 Rotating Scoreboard 判断是否有核,半平面交
    • Accept3347 Kadj Squares
    • Accept////3348
    • Accept//3384 Feng Shui 半平面交
    • 3407 Brookebond s’en va en guerre…
    • 3410 Split convex polygon
    • //3058 求圆与环的相交面积
    • 3597
    • Accept//3608 Bridge Across Islands 求俩凸包最小距离,旋转卡壳

来自:ACM计算几何题目推荐 - 脑残 - 博客频道 - CSDN.NET

把下面的东东都看看,题目刷刷应该就差不多了吧哈。。哈哈。。

其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中。之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专业,GIS)。以后若有机会,我会补充、完善这个列表。

计算几何题的特点与做题要领:

  1. 大部分不会很难,少部分题目思路很巧妙
  2. 做计算几何题目,模板很重要,模板必须高度可靠。
  3. 要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片混乱,那么会严重影响做题正确率。
  4. 注意精度控制。
  5. 能用整数的地方尽量用整数,要想到扩大数据的方法(扩大一倍,或扩大sqrt2)。因为整数不用考虑浮点误差,而且运算比浮点快。

  • 一、点,线,面,形基本关系,点积叉积的理解
  • AcceptPOJ 2318 TOYS(推荐)
    http://poj.org/problem?id=2318
    AcceptPOJ 2398 Toy Storage(推荐)
    http://poj.org/problem?id=2398
    一个矩形,有被若干直线分成N个格子,给出一个点的坐标,问你该点位于哪个点中。
    知识点:其实就是点在凸四边形内的判断,若利用叉积的性质,可以二分求解。

    AcceptPOJ 3304 Segments
    http://poj.org/problem?id=3304
    知识点:线段与直线相交,注意枚举时重合点的处理

    AcceptPOJ 1269 Intersecting Lines
    http://poj.org/problem?id=1269
    知识点::直线相交判断,求相交交点

    AcceptPOJ 1556 The Doors (推荐)
    http://poj.org/problem?id=1556
    知识点:简单图论+简单计算几何,先求线段相交,然后再用Dij求最短路。

    AcceptPOJ 2653 Pick-up sticks
    http://poj.org/problem?id=2653
    知识点:还是线段相交判断,注意判断的顺序。

    AcceptPOJ 1066 Treasure Hunt
    http://poj.org/problem?id=1066
    知识点:线段相交判断,不过必须先理解“走最少的门”是怎么一回事。

    AcceptPOJ 1410 Intersection
    http://poj.org/problem?id=1410
    知识点:线段与矩形相交。正确理解题意中相交的定义。
    详见:http://hi.baidu.com/novosbirsk/blog/item/68c682c67e8d1f1d9d163df0.html

    AcceptPOJ 1696 Space Ant (推荐)
    http://poj.org/problem?id=1696
    德黑兰赛区的好题目。需要理解点积叉积的性质

    AcceptPOJ 3347 Kadj Squares
    http://poj.org/problem?id=3347
    本人的方法极度猥琐。复杂的线段相交问题。这个题目是计算几何的扩大数据运算的典型应用,扩大根号2倍之后就避免了小数。

    AcceptPOJ 2826 An Easy Problem?! (推荐)
    http://poj.org/problem?id=2826
    问:两条直线组成一个图形,能容纳多少雨水。很不简单的Easy Problem,要考虑所有情况。你不看discuss看看能否AC。(本人基本不能)提示一下,水是从天空垂直落下的。

    AcceptPOJ 1039 Pipe
    http://poj.org/problem?id=1039
    又是线段与直线相交的判断,再加上枚举的思想即可。

    AcceptPOJ 3449 Geometric Shapes
    http://poj.org/problem?id=3449
    判断几何体是否相交,不过输入输出很恶心。
    此外,还有一个知识点,就是给出一个正方形(边不与轴平行)的两个对角线上的顶点,需要你求出另外两个点。必须掌握其方法。

    AcceptPOJ 1584 A Round Peg in a Ground Hole
    http://poj.org/problem?id=1584
    知识点:点到直线距离,圆与多边形相交,多边形是否为凸

    AcceptPOJ 2074 Line of Sight (推荐)
    http://poj.org/problem?id=2074
    与视线问题的解法,关键是求过两点的直线方程,以及直线与线段的交点。数据有一个trick,要小心。

  • 二、凸包问题
  • AcceptPOJ 1113 Wall
    http://poj.org/problem?id=1113
    知识点:赤裸裸的凸包问题,凸包周长加上圆周。

    AcceptPOJ 2007 Scrambled Polygon
    http://poj.org/problem?id=2007
    知识点:凸包,按极角序输出方案

    AcceptPOJ 1873 The Fortified Forest (推荐)
    http://poj.org/problem?id=1873
    World Final的水题,先求凸包,然后再搜索。由于规模不大,可以使用位运算枚举。
    详见:http://hi.baidu.com/novosbirsk/blog/item/333abd54c7f22c52574e0067.html

    AcceptPOJ 1228 Grandpa's Estate (推荐)
    http://poj.org/problem?id=1228
    求凸包顶点数目,很多人求凸包的模板是会多出点的,虽然求面积时能得到正确答案,但是在这个题目就会出问题。此外,还要正确理解凸包的性质。

    AcceptPOJ 3348 Cows
    http://poj.org/problem?id=3348
    凸包面积计算

  • 三、面积问题,公式问题
  • AcceptPOJ 1654 Area
    http://poj.org/problem?id=1654
    知识点:利用有向面积(叉积)计算多边形面积

    AcceptPOJ 1265 Area
    http://poj.org/problem?id=1265
    AcceptPOJ 2954 Triangle
    http://poj.org/problem?id=2954
    Pick公式的应用,多边形与整点的关系。(存在一个GCD的关系)

  • 四、半平面交
  • 半平面交的主要应用是判断多边形是否存在核,还可以解决一些与线性方程组可行区域相关的问题(就是高中时的那些)。

    AcceptPOJ 3335 Rotating Scoreboard
    http://poj.org/problem?id=3335
    AcceptPOJ 3130 How I Mathematician Wonder What You Are!
    http://poj.org/problem?id=3130
    AcceptPOJ 1474 Video Surveillance
    http://poj.org/problem?id=1474
    知识点:半平面交求多边形的核,存在性判断

    AcceptPOJ 1279 Art Gallery
    http://poj.org/problem?id=1279
    半平面交求多边形的核,求核的面积

    AcceptPOJ 3525 Most Distant Point from the Sea (推荐)
    http://poj.org/problem?id=3525
    给出一个多边形,求里面的一个点,其距离离多边形的边界最远,也就是多边形中最大半径圆。
    可以使用半平面交+二分法解。二分这个距离,边向内逼近,直到达到精度。

    AcceptPOJ 3384 Feng Shui (推荐)
    http://poj.org/problem?id=3384
    半平面交实际应用,用两个圆覆盖一个多边形,问最多能覆盖多边形的面积。
    解法:用半平面交将多边形的每条边一起向“内”推进R,得到新的多边形,然后求多边形的最远两点。

    AcceptPOJ 1755 Triathlon (推荐)
    http://poj.org/problem?id=1755
    半平面交判断不等式是否有解。注意不等式在转化时正负号的选择,这直接影响到半平面交的方向。

    AcceptPOJ 2540 Hotter Colder
    http://poj.org/problem?id=2540
    半平面交求线性规划可行区域的面积。

    AcceptPOJ 2451 Uyuw's Concert
    http://poj.org/problem?id=2451
    Zzy专为他那篇nlogn算法解决半平面交问题的论文而出的题目。

  • 五、计算几何背景,实际上解题的关键是其他问题(数据结构、组合数学,或者是枚举思想)
  • 若干道经典的离散化+扫描线的题目,ACM选手必做题目

    AcceptPOJ 1151 Atlantis (推荐)
    http://poj.org/problem?id=1151
    AcceptPOJ 1389 Area of Simple Polygons
    http://poj.org/problem?id=1389
    矩形离散化,线段树处理,矩形面积求交

    AcceptPOJ 1177 Picture (推荐)
    http://poj.org/problem?id=1177
    矩形离散化,线段树处理,矩形交的周长,这个题目的数据比较强。线段树必须高效。

    AcceptPOJ 3565 Ants (推荐)
    http://poj.org/problem?id=3565
    计算几何中的调整思想,有点像排序。要用到线段相交的判断。
    详见:http://hi.baidu.com/novosbirsk/blog/item/fb668cf0f362bec47931aae2.html

    AcceptPOJ 3695 Rectangles
    http://poj.org/problem?id=3695
    又是矩形交的面积,但是由于是多次查询,而且矩形不多,使用组合数学中的容斥原理解决之最适合。线段树是通法,但是除了线段树,还有其他可行的方法。

    AcceptPOJ 2002 Squares
    http://poj.org/problem?id=2002
    枚举思想,求平面上若干个点最多能组成多少个正方形,点的Hash

    AcceptPOJ 1434 Fill the Cisterns!(推荐)
    http://poj.org/problem?id=1434
    一开始发昏了,准备弄个线段树。其实只是个简单的二分。

  • 六、随机算法
  • AcceptPOJ 2420 A Star not a Tree?
    http://poj.org/problem?id=2420
    多边形的费马点。所谓费马点,就是多边形中一个点P,该点到其他点的距离之和最短。四边形以上的多边形没有公式求费马点,因此可以使用随机化变步长贪心法。
    详见:http://hi.baidu.com/novosbirsk/blog/item/75983f138499f825dd54019b.html

  • 七、解析几何
  • 这种题目本人不擅长,所以做得不多,模板很重要。当然,熟练运用叉积、点积的性质还是很有用的。

    AcceptPOJ 1375 Intervals
    http://poj.org/problem?id=1375
    知识点:过圆外一点求与圆的切线

    AcceptPOJ 1329 Circle Through Three Points
    http://poj.org/problem?id=1329
    求三角形外接圆

    AcceptPOJ 2354 Titanic
    http://poj.org/problem?id=2354
    求球面上两个点的距离,而且给的是地理经纬坐标。

    AcceptPOJ 1106 Transmitters
    http://poj.org/problem?id=1106
    角度排序,知道斜率求角度,使用atan函数。

    AcceptPOJ 1673 EXOCENTER OF A TRIANGLE
    http://poj.org/problem?id=1673
    可以转化为三角形的垂心问题。

  • 八、旋转卡壳
  • AcceptPOJ 2187 Beauty Contest
    http://poj.org/problem?id=2187
    凸包求最远点对。可以暴力枚举,也可以使用旋转卡壳。

    AcceptPOJ 3608 Bridge Across Islands(难)
    http://poj.org/problem?id=3608
    两个凸包的最近距离。本人的卡壳始终WA。郁闷。

  • 九、其他问题
  • POJ 1981 Circle and Points
    http://poj.org/problem?id=1981
    求单位圆最多能覆盖平面上多少个点

这次的题目不再局限于POJ了,因为自己去年周游了各个OJ,反而很少在POJ切题了。而且这次推荐的题目比上次难了,也复杂多了。现在看回自己第一次写的计算几何题目推荐,实在感到当时自己写得有点肤浅。其实对于一些大牛来说,这些题目也算不了什么。

下面的OJ之中,CII是指ACM-ICPC Live Archive ,网址是: http://cii-judge.baylor.edu/

其他OJ的地址大家都熟知了,因此不再提供。

希望各位转载的同志注明本文的出处。

一。基础题目 1.1 有固定算法的题目

A, 最近点对问题 最近点对问题的算法基于扫描线算法。 ZOJ 2107 Quoit Design 典型最近点对问题 AcceptPOJ 3714 Raid 变种最近点对问题

B,最小包围圆 最小包围圆的算法是一种增量算法,期望是O(n)。 ZOJ 1450 Minimal Circle
HDU 3007 Buried memory

C,旋转卡壳 POJ 3608 Bridge Across Islands 旋转卡壳解两凸包最小距离 AcceptPOJ 2079 Triangle 旋转卡壳计算平面点集最大三角形

1.2 比较简单的题目 HDU 3264 Open-air shopping malls ,圆面积相交问题,如果用二分法做的话不难 CII 3000 Tree-Lined Streets,几何+贪心
CII 4676 Geometry Problem,模板题
HDU 3272 Mission Impossible,枚举+镜面反射思想 POJ 3334 Connected Gheeves,二分答案,面积判定 POJ 1819 Disks,模拟一下
CII 3905 Meteor,貌似还是比较简单 ZOJ 2589 Circles,平面图的欧拉定理,圆的相交 POJ 2194 Stacking Cylinders,向量旋转

二。经典算法

2.1 三角剖分 三角剖分这个东西貌似去年流行了一下,高校联赛时某U连续出了两次。实际上对多边形进行三角剖分是一个很常见的算法思想,因为三角形是一个比较简单的凸多 边形,可以对两个三角形比较容易地求公共面积,这也是三角剖分最常见的用途。对这个算法进行扩展,就可以求两个简单多边形的面积交了。主要是理解有向面积 的概念。

第一类是圆与三角形的相交,主要做法是分情况讨论。 AcceptPOJ 3675 Telescope 三角形剖分,圆与三角形的交 AcceptPOJ 2986 A Triangle and a Circle 三角形剖分,圆与三角形的交 ZOJ 2675 Little Mammoth 三角形剖分,圆与三角形的交

第二类是多边形与多边形相交。 HDU 3060 Area2 简单多边形面积并,三角剖分

三角形剖分的另一种变种是梯形剖分,应用起来稍有局限性,但是比三角形剖分好写。 POJ 3148 ASCII Art 多边形梯形剖分,半平面交

多边形的重心问题,也是三角形剖分的应用: CII 4426 Blast the Enemy!

2.2 极角排序 顾名思义,极角排序一般就是有一个圆心的问题,将平面上各个点按照与圆心极角进行排序。然后就可以在线性扫描之中解决一些统计问题。不过这类问题就稍稍超出计算几何范畴了。

UVA 11696 Beacons 颇为经典的极角排序的统计问题,记得darkgt大牛有一篇文章提到这个题目。 CII 4064 Magnetic Train Tracks,极角排序的统计问题,补集思想。 UVA 11704 Caper pizza POJ 2280 Amphiphilic Carbon Molecules,极角排序相当巧妙地解决了这个问题。

2.3 扫描线算法 扫描线算法,需要使用到平衡树辅助,写起来比较复杂(对于本菜而言)。关于平衡树,我建议是直接使用STL的set或map。所以你需要掌握一些C++的 知识,才能够看懂一份使用了map与set的代码。当年学习OI牛的代码我看得很纠结。不过只要理解了“事件点”这一个概念后就比较好办了。

HDU 3124 Moonmist 二分+扫描线。最近圆对,不存在改编最近点对的方法。不过当时数据弱,很多人乱搞过了 POJ 2927 Coneology 平衡树+扫描线,与上题类似。

下面两个题目都是关于多边形的扫描线算法,关于平面上许多凸多边形套了多少层的问题。 CII 4125 Painter ,这个是Final题,比较简单,是判断三角形嵌套层数的。 UVA 11759 IBM Fencing,上题是三角形,这题是多边形,稍稍难了一点。不过理解好扫描线算法的话应该没有问题。

2.4 其他题目 POJ 3528 Ultimate Weapon,模板化的三维凸包。知道几个三维有向体积的概念即可比较容易理解三维凸包的算法。三维凸包算法又是一种增量算法。

三。不确定算法/极值问题 POJ 3301 Texas Trip ,算是一种模拟退火求极值的问题,通过平面旋转找到最佳答案。 AcceptSPOJ 4409 Circle vs Triangle(AREA1),也是模拟退火 UVA 11562 Hard Evidence,应用三分极值法求极值。

四。传统几何、公式题 UVA有一个名叫Shahriar Manzoor喜欢出这些题目,喜欢这类题目的同志可以研究一本名叫《近代欧式几何学》的书。不过这些题目一般中学几何知识能够解决。 CII 4413 Triangle Hazard,梅涅劳斯定理,想不到SCNU校赛出到了 UVA 11524 InCricle,三角形内切圆性质联立海伦公式 CII 4714 In-circles Again,还是公式推导 POJ 2208 Pyramids,欧拉四面体公式

五。几何结合其他算法,麻烦题

HDU 2297 Run,百度杯的题目,利用到了zzy的半平面交的极角排序思想。 CII 4448 Conduit Packing,问一个大圆能否放下四个小圆。颇为变态的Final题,算法都很基础,就是二分一个答案,枚举两个已知圆,求与已知的两圆公切的第三个圆,枚举放置的位置……关键是不好想。 CII 4510 Slalom 几何+最短路 UVA 11422 Escaping from Fractal Bacterium ,麻烦题,主要还是向量旋转。 HDU 3228 Island Explorer,利用了最小生成树的性质。 CII 4499 Camera in the Museum,有关圆形处理的,很不错的题目。 CII 2395 Jacquard Circuits,Pick公式的应用 POJ 3747 Scout YYF II,又是一个几何问题,需要猜想一下。 POJ 3336 ACM Underground,几何预处理,并查集 CII 4428 Solar Eclipse,也是不错的题目,涉及圆的问题 CII 4206 Magic Rings,dancing links解重复覆盖问题,二分,百度杯也有个类似的题目。 POJ 1263 Reflections,与下面一个题目都是一类光线在球面上反射问题。解决方法是解析几何,参数方程,向量旋转等等。 CII 4161 Spherical Mirrors,上面题目的三维版本。 POJ 3521 Geometric Map,复杂的预处理,可以用于自虐 CII 3270 Simplified GSM Network 虽然有着V图的模型,但是规模小,所以无须出动V图算法,用半平面交即可。变态级的V图算法可以咨询三鲜教主。 CII 4617 Simple Polygon,平面上有一堆点,叫你用一笔画把这些点连起来,连成一个闭合的简单多边形,线不允许出现相交。改造一下凸包算法即可。

当然,除了上述的题目外,还有许多比较精彩的计算几何题目等待大家发掘。

这两天在学习计算几何,随便说说自己的学习过程吧。

  基本的叉积、点积和凸包等东西就不多说什么了,网上一搜一大堆,切一些题目基本熟悉了就差不多了。

  一些基本的题目可以自己搜索,比如这个blog:http://blog.sina.com.cn/s/blog_49c5866c0100f3om.html

  接下来,研究了半平面交,思想方法看07年朱泽园的国家队论文,模板代码参考自我校大牛韬哥:

http://www.owent.net/2010/10/acm-%E8%AE%A1%E7%AE%97%E5%87%A0%E4%BD%95-%E4%B8%AA%E4%BA%BA%E6%A8%A1%E6%9D%BF.html

  一些半平面交的题目:

  

AcceptPOJ 3335 Rotating Scoreboard
  http://poj.org/problem?id=3335
  AcceptPOJ 3130 How I Mathematician Wonder What You Are!
  http://poj.org/problem?id=3130
  AcceptPOJ 1474 Video Surveillance
  http://poj.org/problem?id=1474
  知识点:半平面交求多边形的核,存在性判断

  

AcceptPOJ 1279 Art Gallery
  http://poj.org/problem?id=1279
  半平面交求多边形的核,求核的面积

  

AcceptPOJ 3525 Most Distant Point from the Sea (推荐)
  http://poj.org/problem?id=3525
  给出一个多边形,求里面的一个点,其距离离多边形的边界最远,也就是多边形中最大半径圆。
  解法:可以使用半平面交+二分法解。二分这个距离,边向内逼近,直到达到精度。

  

AcceptPOJ 3384 Feng Shui (推荐)
  http://poj.org/problem?id=3384
  半平面交实际应用,用两个圆覆盖一个多边形,问最多能覆盖多边形的面积。
  解法:用半平面交将多边形的每条边一起向“内”推进R,得到新的多边形,然后求多边形的最远两点。

  

AcceptPOJ 1755 Triathlon (推荐)
  http://poj.org/problem?id=1755
  半平面交判断不等式是否有解。注意不等式在转化时正负号的选择,这直接影响到半平面交的方向。

  

AcceptPOJ 2540 Hotter Colder
  http://poj.org/problem?id=2540
  半平面交求线性规划可行区域的面积。

  

AcceptPOJ 2451 Uyuw’s Concert
  http://poj.org/problem?id=2451
  Zzy专为他那篇nlogn算法解决半平面交问题的论文而出的题目。

  

(以上题目来自别人的blog,后面还有几题是我自己找到的)

  

AcceptPOJ 1271 Nice Milk
  http://poj.org/problem?id=1271
  黑书习题

  UVA 11722 Joining with Friend   http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=117&page=show_problem&problem=2769   概率问题,这个规模用半平面交有点浪费,不过就当练习了

  USACO 2010 MARCH GOLD StarCowraft   http://61.187.179.132:8080/JudgeOnline/showproblem?problem_id=1829

  

  接下来稍微弄了一下坐标旋转的问题,具体可以参考武汉大牛的博文http://dumbear.com/blog/?p=143

  坐标旋转题目切得不多

  

AcceptHDU 1700 Points on Cycle
  http://acm.hdu.edu.cn/showproblem.php?pid=1700
  比较基础的一道题

  POJ 3845 Fractal   http://poj.org/problem?id=3845   注意eps的取值

  

AcceptPOJ 1133 Stars
  http://poj.org/problem?id=1133

  Harbin Online Contest 2010   http://acm.hrbeu.edu.cn/index.php?act=problem&id=1006&cid=16   三维坐标旋转。这个要有账号才能提交,还有就是Sample Input 中第二个Sample的“275”改成“270”

  HDU 3623 Covering Points (2010天津网络赛C题)   http://acm.hdu.edu.cn/showproblem.php?pid=3623 (航电没有这题了)   http://acm.tju.edu.cn/toj/showp3740.html

  FZU 2002 Shade of Hallelujah Mountain (2010福州regional)   http://acm.fzu.edu.cn/problem.php?pid=2002

  

AcceptHDU 4087 ALetter to Programmers (2011 北京现场赛)
  http://acm.hdu.edu.cn/showproblem.php?pid=4087
  三维旋转矩阵 + 矩阵加速

  然后是旋转卡壳,一个很好的学习网站http://cgm.cs.mcgill.ca/~orm/rotcal.html(不过是英文的),后来找到一个大牛的blog里有部分翻译http://blog.csdn.net/ACMaker,综合起来看了一下,收益良多啊。

  一些旋转卡壳的题目

  

AcceptPOJ 2187 Beauty Contest
  http://poj.org/problem?id=2187
  凸包求最远点对。可以暴力枚举,也可以使用旋转卡壳。
AcceptPOJ 3608 Bridge Across Islands
  http://poj.org/problem?id=3608
  两个凸包的最近距离。
  上面两题可以参考blog:http://www.cppblog.com/staryjy/archive/2009/11/19/101412.html(上面代码很不错)

  

AcceptPOJ 2079 Triangle
  http://poj.org/problem?id=2079
  这题以为O(N^2)的复杂度会超时,结果就是O(N^2)复杂度

  UVA 10173   http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=13&problem=1114&mosmsg=Submission+received+with+ID+8029560   给定点集S,求S的最小覆盖矩形

  

  然后看了一些扫描线之类的东西。

  推荐几道比不错的题目:

  POJ 2932 Coneology   http://poj.org/problem?id=2932

  HDU 3124 Moonmist   http://acm.hdu.edu.cn/showproblem.php?pid=3124   最近圆对问题(二分 + 扫描线)

  HDU 3867 Light and Shadow   http://acm.hdu.edu.cn/showproblem.php?pid=3867   (按极角扫描)注意-PI和PI的位置分割

下面看了一些随机算法:(08年顾研论文-《浅谈随机化思想在几何问题中的应用》)

  解析几何,平面最近点对,。。。这些搞得也不是很深入。

  

  折纸问题 参见大牛dumbear的blog http://dumbear.com/blog/?p=249

  两道题目

  POJ 1921 Paper Cut   http://poj.org/problem?id=1921   这题相对下一题还算比较好做

  POJ 3806 Origami Through-Hole   http://poj.org/problem?id=3806   这题处理有点麻烦,我调试了很久才过

   

  圆的面积并和交,详细可以看AekdyCoin大牛的blog

  圆的面积并:http://hi.baidu.com/aekdycoin/blog/item/c1b28e3711246b3f0b55a95e.html

  圆的面积交:http://hi.baidu.com/aekdycoin/blog/item/12267a4e9476153bafc3abbd.html

  题目:

  SPOJ 8073 The area of the union of circles   https://www.spoj.pl/problems/CIRU/

  SPOJ 3863 Area of circles   https://www.spoj.pl/problems/VCIRCLES/

  SPOJ 8119 CIRU2   https://www.spoj.pl/problems/CIRUT/   圆面积并的拓展

  HDU 3467 Song of the Siren   http://acm.hdu.edu.cn/showproblem.php?pid=3467

  HDU 3239 Jiajia's Robot (推荐)   http://acm.hdu.edu.cn/showproblem.php?pid=3239   很巧妙的一道题,我是看了AC大牛blog中的留言才知道到方法的。   方法见AC大牛blog中的一条留言:http://hi.baidu.com/aekdycoin/blog/item/12267a4e9476153bafc3abbd.html

  

  凸多边形的面积并

  先看了AC大牛的blog学会了O(N^3)的方法,后来在做Codeforces的时候发现有O(N^2*logN)的方法,而且也不繁琐

  AC大牛的博文:http://hi.baidu.com/aekdycoin/blog/item/fbe5a03232c71952ad4b5fcc.html

  Codeforces Round #83 DIV1 的 E题用O(N^3)的方法过不掉第49组数据,然后研究了其他大牛的凸多边形交的代码

  http://codeforces.com/contest/107/status/E

  先是看了dagon的代码发现其实他的代码有问题,Codeforces的数据居然没有查出来。然后看了syntax_error的代码,

  发现他是用类似梯形剖分的方法做的,复杂度O(N^2*logN),果断就学习了

  题目:http://codeforces.com/contest/107/problem/E

  有关细节:http://www.cnblogs.com/ch3656468/archive/2011/10/17/2215551.html

  有一类题目是给出一些点,并告诉你哪些点之间有连线,并且这些连线段之间除端点之外没有其他交点(有时候这些线段是要自己处理出来的)。

  然后题目要你求

    1 每小块多边形的面积

    2 有多少个K多边形内部不含点和线段

    3 这些线段围成的图形的轮廓线

  这类题目的方法都差不多,在很多大牛的blog里都可以找到类似的方法。

  比如: gccfeli大牛的blog:http://gccfeli.cn/2007/09/%E8%AE%A1%E7%AE%97%E5%87%A0%E4%BD%95-pku1092-%E5%A5%87%E7%89%B9%E7%9A%84%E6%8A%80%E5%B7%A7.html

      watashi大牛的blog:http://watashi.ws/blog/970/andrew-stankevich-3-solution/

      Isun大牛的blog:http://hi.baidu.com/xh176233756/blog/item/29652646f0e870006a63e5cb.html

  题目:

  POJ 1092 Farmland   http://poj.org/problem?id=1092

  ZOJ 2361 Areas / SGU 209   http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2361   不错的一题,watashi的blog里有解题报告

  POJ 3743 LL’s cake   http://poj.org/problem?id=3743

  POJ 2164 Find the Border   http://poj.org/problem?id=2164

  三维几何

  网上有关三维几何的内容很少阿,代码和题目基本都不怎么能搜到,我也就切了不多的几题

  前面坐标旋转里的两到题:

    Harbin Online Contest 2010     http://acm.hrbeu.edu.cn/index.php?act=problem&id=1006&cid=16     三维坐标旋转。这个要有账号才能提交,还有就是Sample Input 中第二个Sample的“275”改成“270”

    FZU 2002 Shade of Hallelujah Mountain (2010福州regional)     http://acm.fzu.edu.cn/problem.php?pid=2002

  SGU 110 Dungeon   http://acm.sgu.ru/problem.php?contest=0&problem=110   三维光线反射

  FZU 1981 Three kingdoms (2010福州网络赛)   http://acm.fzu.edu.cn/problem.php?pid=1981   坐标映射,我一开始用map一直TLE,只好改成不用map的代码

  UVA 11275 3D Triangles   http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=2250   HDU 4042是这题的加强版,我使用同样的代码AC的   对于这题题目中诡异的精度0.000001我并没有特别处理

  HDU 4042 Fireworks (2011北京网络赛)   http://acm.hdu.edu.cn/showproblem.php?pid=4042   很不错的题目 (解题报告:http://hi.baidu.com/%D0%A1%CE%E4rj/blog/item/0114bb2dcd4cdef78b13991d.html)

  

AcceptHDU 4087 ALetter to Programmers (2011 北京现场赛)
  http://acm.hdu.edu.cn/showproblem.php?pid=4087
  三维旋转矩阵 + 矩阵加速

  其他一些题目:

  EOJ 283 Target Practice   http://202.120.106.94/onlinejudge/problemshow.php?pro_id=283   搜索 + 几何

  POJ 1688 Dolphin Pool   http://poj.org/problem?id=1688   这题有好几种做法

  POJ 1981 Circle and Points   http://poj.org/problem?id=1981   很经典的一道题目

<p><span class="label label-success">Accept</span>POJ 3675 Telescope<br> <a href="http://poj.org/problem?id=3675" target="_blank">http://poj.org/problem?id=3675</a><br> 圆和多边形的公共面积<br> </p> POJ 1259 The Picnic

  http://poj.org/problem?id=1259   最大凸洞,计算几何 + DP

  POJ 1586 Three Sides Make a Triangle   http://poj.org/problem?id=1586   题目内容很简单,方法也很明显,不过想AC可不容易,精度很恶心的一题,我是看了discuss才过的

<p><span class="label label-success">Accept</span>HDU 3629 Convex (推荐)<br> <a href="http://acm.hdu.edu.cn/showproblem.php?pid=3629" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=3629</a><br> 一道不错的题目,这题有两种思路:<br> 1)<a href="http://apps.topcoder.com/wiki/display/tc/TCO%2710+Online+Round+4" target="_blank">http://apps.topcoder.com/wiki/display/tc/TCO%2710+Online+Round+4</a><br> 2)<a href="http://www.owent.net/2010/09/the-35th-acmicpc-asia-regional-tianjin-site-%E2%80%94%E2%80%94-online-contest-1009-convex-%E8%A7%A3%E9%A2%98%E6%8A%A5%E5%91%8A.html" target="_blank">http://www.owent.net/2010/09/the-35th-acmicpc-asia-regional-tianjin-site-%E2%80%94%E2%80%94-online-contest-1009-convex-%E8%A7%A3%E9%A2%98%E6%8A%A5%E5%91%8A.html</a><br> </p> <p><span class="label label-success">Accept</span>HDU 3644 A Chocolate Manufacturer's Problem (2010杭州网络赛)<br> <a href="http://acm.hdu.edu.cn/showproblem.php?pid=3644" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=3644</a><br> 本来想用模拟退火水一下的,结果徘徊于WA和TLE之间无法AC<br> </p>

  FZU 1973 How many stars (推荐) (2010福州网络赛)   http://acm.fzu.edu.cn/problem.php?pid=1973   比较经典的一道题目

  POI2007 对称轴osi   http://www.zybbs.org/JudgeOnline/problem.php?id=1100   很犀利的一道题目,题意是判多边形的对称轴个数,原来做的这种题目都是用O(N^2)的复杂度来解的,   这次O(N^2)果断不行,加随机化也过不了,最后在解题报告的指导下才搞定这题。第一次发现计算几何   的问题居然还能用字符串的方法解。   网上搜到的解题报告:http://hi.baidu.com/nplusnplusnplu/blog/item/d260baef2e9e9c5879f055cb.html