几何
ACM_devil
这个作者很懒,什么都没留下…
展开
-
HDOJ1007最近点对
题目:题目链接一 问题描述假设平面内有N个点,每个点以坐标(x, y)给出,N的数据量很大,如何求出其中最近的两个点。二 算法一种方法是暴力,通过枚举任意两个点,找到最小的,一共要比较C(n, 2)次,故实践复杂度为O(n2),超时。另外一种就是分治法,步骤为:1把所有点按x坐标的大小排序,从中间一份为二。2最近点对有三种情况原创 2013-07-16 14:24:38 · 1920 阅读 · 0 评论 -
POJ 2954 (匹克定理)
题目:题目链接题目的意思就是说给你一个三角形的三点的坐标,让你求出这个三角形内部的格点的数目:分析:直接就是匹克定理的应用了。由于S=a+b/2-1;所以就可以推出 a=((2*S)+2-b)/2;就是这样了;求面积的时候用叉积来求,然后那个边上的点是用gcd来算的。就这样了(注意:要关注数字的数量级)代码:#include #include #include #incl原创 2013-07-27 16:25:25 · 1248 阅读 · 0 评论 -
POJ3525(二分+半平面交)
题目:题目链接 题目:就是给你一个多边形,让你判断这个多边形的最大内切圆 分析:二分半径r,把每条边向内收缩r,半平面交判可行 半平面交还是太弱: 代码: #include #include #include #include #include #include #include #include #include #include #i原创 2013-09-06 10:29:29 · 877 阅读 · 0 评论 -
POJ1755-半平面交判断不等式是否有解
题目:题目链接 题意:就是给你铁人三项,每个人在某一项中有确定的速度,裁判可以决定某一项比赛的路程为多少,问对于某个人,是否存在一种安排能使他拿到第一,而且不能是并列。 分析:假设每一段路程的长度分别为x, y, z,那么对于一个选手的时间就是x/u1+y/v1+z/w1;如果一个人要胜过另外一个人那么必须满足方程式x/u1 + y/v1 + z/w1 < x/u2 + y/v原创 2013-09-06 14:59:51 · 1186 阅读 · 0 评论 -
POJ2540-半平面交求线性规划可行区域的面积
题目:题目链接 题意:就是每次给出一个坐标,然后相对于上一个坐标这个点到宝藏的 距离是靠近(hotter)还是远离(colder),还是不变(same); 分析:这样的话,等于每次走一次就确定一个半平面区域,也就是从这个点到另一个点的中垂线然后分割成的半平面,求可能存在的面积。改了一下午,怎么都不对,改来改去,煞笔了,模版的一个小地方敲错了。 代码: #原创 2013-09-06 16:24:17 · 935 阅读 · 0 评论 -
POJ2451-半平面交
题目: 题目链接 题目:就是给出N个半平面,求这N个半平面交 分析:O(n^2),初始化坐标系(0,10000)*(0,10000)。然后对每一个半平面cut一次。最后求一次面积即可: 代码: #include #include #include #include #include #include #include #include #includ原创 2013-09-07 16:38:24 · 848 阅读 · 0 评论 -
POJ2187-最远点对
题目:题目链接 题意:题目的意思就是说给你N个点,然后让你求出最远的两个点的距离的平方(注意:是平方); 分析:对于50000个点暴力肯定是不行的,那么我们可以联系到凸包,因为最远的点肯定是在凸包上,那么要求最远的距离,我们就可以先对这些点求一次凸包(复习凸包的写法)。然后对于凸包上面的点可以枚举,因为这时候要枚举的点的数目已经减少很多了,这时候,就是普通的暴搞了。主要是前原创 2013-09-07 20:37:53 · 1372 阅读 · 2 评论 -
POJ2420(求多边形费马点)
题目:题目链接 题意:题目的意思就是给你N个点,在平面上寻找一个点,使得这个点到其他点的距离之和最小,问你最小的距离是多少? 分析:在三角形内部这个点叫做费马点(费马点定义)。那么这道题目就是求一个多变形的费马点。这样的话,我们可以像搜索那样,先定义一个起点,然后以这个点为基点分别向上、向下、向左、向右移动,只要使得距离之和变小的移动都是有效的移动。那么我们可以从第一点原创 2013-09-07 19:44:17 · 3580 阅读 · 0 评论 -
POJ1696-凸包
题目:题目链接 题意:找逆时针螺旋线最多能连几个点 分析:贪心使用一些几何上的极角排序,凸包的应用,每次都连最外面的点即可。每次找到一个当前点curp,除了第一次是对数组按纵坐标排序得出外,剩下的均按极角排序。使用一个ans数组记录链接的每一个点: 代码: #include #include #include #include #include #原创 2013-09-05 15:23:25 · 779 阅读 · 0 评论 -
求解多边形内核
关于求多边形内核的算法什么是多边形的内核?它是平面简单多边形的核是该多边形内部的一个点集,该点集中任意一点与多边形边界上一点的连线都处于这个多边形内部。就是一个在一个房子里面放一个摄像 头,能将所有的地方监视到的放摄像头的地点的集合即为多边形的核。 如上图,第一个图是有内核的,比如那个黑点,而第二个图就不存在内核了,无论点在哪里,总有地区是看不到的。 那么,如何求得这个原创 2013-09-05 16:30:26 · 2046 阅读 · 0 评论 -
POJ3555//POJ3130//POJ1474-求解多边形内核
题目:题目链接 题意:就是判断一个多边形是不是有核,(多边形内核); 分析:就是每次枚举一条线段,用这条线段去切割原来的多边形,判断最后剩余的点数。如果没有了的话,那么就没有核的存在了,反之则有 代码: #include #include #include #include #include #include #include #include #i原创 2013-09-05 16:48:07 · 830 阅读 · 0 评论 -
POJ1279-求解多边形内核面积
题目:题目链接 题意:题目意思就是给你一个多边形,然后让你求出内核的面积。 分析:还是求内核的问题,先按照求内核的方法求出点,然后又是一个多边形求面积。对于顺时针还是逆时针,最后的面积判个绝对值就可以了: 代码: #include #include #include #include #include #include #include #incl原创 2013-09-05 21:02:35 · 804 阅读 · 0 评论 -
POJ3304-线段与直线相交
题目:题目链接题意:就是给你N条线段。问你是不是存在这样一条线段,使得所有的点都和这些线段相交分析:存在一条直线穿过所有的线段。那么我们找任意两个端点,然后判断这两个端点构成的线段是不是和所有的直线相交。如果找到一条就直接return true即可:代码:#include #include #include #include #include原创 2013-10-04 19:34:12 · 679 阅读 · 0 评论 -
POJ3714-最近点对
题目:题目链接 题意:求一群点当中的最近的两个点 分析:分治法,直接把点分成两部分,分别计算最近点对,在合并,模版 代码:#include #include #include #include #include #include #include #include #include #include #include #include #incl原创 2013-09-27 21:29:35 · 2291 阅读 · 0 评论 -
POJ1265 (匹克定理)
题目:题目链接这道题说就是给出你在一个格子中按逆时针方向依次相邻点的坐标差值dx,dy,求出该多边形的面积,在多边形边上的点个数,多边形里面的点个数。刚开始一直看不懂,最后搜了一下,发现了一个匹克定理(匹克定理百科:http://baike.baidu.com/view/3207200.htm),好神奇的定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b÷2-1,其中a表示多边形原创 2013-07-27 15:15:14 · 1023 阅读 · 0 评论 -
POJ 3358 凸包求面积
题目:题目链接题目的意思就是给你N个点,然后让你求出包含所有树木在内的凸多边形,这就是凸包嘛。然后就是让你求出这个凸包的面积。50可以存放一只牛。问可以放多少牛。分析:这中凸包的题目都大体不变的,直接上模板就OK了:#include #include #include #include using namespace std;const int N = 1005;原创 2013-07-26 16:16:50 · 903 阅读 · 0 评论 -
POJ 1654(凸多边形面积)
题目:题目链接就是给出一串操作,分别代表向上、向下、向左、向右、左上、右上、右下、左下。然后问你最后的凸多边形的面积,并且这些操作最后都是要收尾的。用向量来算面积。#include #include #include #include #include #include #include #include #include #include #include #inc原创 2013-07-27 11:41:39 · 1003 阅读 · 0 评论 -
寻找凸包的Graham算法
1,点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。 2,凸包最常用的凸包算法是Graham扫描法和Jarvis步进法。 3,Graham扫描法: 首先,找到所有点中最左边的(y坐标最小的),如果y坐标相同,找x坐标最小的. 以这个点为基准求所有点的极角(atan2(y-y0,x-x0)),并按照极角对这些点排序,前述基准点在最前转载 2013-07-16 14:37:23 · 1279 阅读 · 2 评论 -
HDOJ1348凸包模版
题目:题目链接Problem DescriptionOnce upon a time there was a greedy King who ordered his chief Architect to build a wall around the King's castle. The King was so greedy, that he would not listen to h原创 2013-07-16 15:01:19 · 911 阅读 · 0 评论 -
HDOJ1392凸包模版
题目:题目链接Problem DescriptionThere are a lot of trees in an area. A peasant wants to buy a rope to surround all these trees. So at first he must know the minimal required length of the rope. Howeve原创 2013-07-16 15:19:46 · 936 阅读 · 0 评论 -
HDU/HDOJ2202凸包模版+枚举
题目:题目链接Problem Description老师在计算几何这门课上给Eddy布置了一道题目,题目是这样的:给定二维的平面上n个不同的点,要求在这些点里寻找三个点,使他们构成的三角形拥有的面积最大。Eddy对这道题目百思不得其解,想不通用什么方法来解决,因此他找到了聪明的你,请你帮他解决这个题目。 Input输入数据包含多组测试用例,每个测试用例的第一行包含一个整原创 2013-07-16 16:38:42 · 920 阅读 · 0 评论 -
判断点在多边形内的多种写法
再经典不过的算法了: // 功能:判断点是否在多边形内 // 方法:求解通过该点的水平线与多边形各边的交点 // 结论:单边交点为奇数,成立! //参数: // POINT p 指定的某个点 // LPPOINT ptPolygon 多边形的各个顶点坐标(首末点可以不一致) // int nCount 多边形定点的个数原创 2013-07-24 09:14:54 · 1670 阅读 · 0 评论 -
POJ 2398(同POJ2318)
题目:题目链接题目意思同2318,只不过加了线段排序。再者输出每一种数量有几个格子就OK:代码:#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;cons原创 2013-07-25 10:16:09 · 750 阅读 · 0 评论 -
POJ2318(计算几何)
题目:题目链接题目的意思就是说给你一个方格子,里面用n条线隔开了。现在给你n个玩具的坐标,这些玩具肯定在方格里面,让你求每一个方格里面有多少个玩具。叉积+二分搜索。由于点必定在格子中,因此,用目标点和格子边上的四个点进行叉积运算,点在格子的“左边”的右边且在格子的“右边”的左边时,即在该格子中,否则,根据叉积结果二分搜索。代码:#include #include #incl原创 2013-07-25 09:56:30 · 849 阅读 · 0 评论 -
POJ 1269直线相交
题目:题目链接题目意思:就是给你两条直线的上的两点的坐标,让你判断这两条直线是不是相交,不相交的话判断是不是平行或者是不是重合。原创 2013-07-25 19:44:56 · 1086 阅读 · 0 评论 -
POJ 2653(线段相交)
题目:题目链接题目的意思就是说,给你n个线段,把这些线段随机丢到坐标平面上,问你最后在最上面的线段有哪些?就是一个判断线段相交的问题分析:我们可以拿一条线段,然后枚举后面的线段,如果有一条线段和当前的线段相交,就直接break掉,如果后面的线段都没有和其相交的话,就把其编号保存下来,最后输出编号就OK了,代码:#include #include #include #inclu原创 2013-07-26 10:13:58 · 917 阅读 · 0 评论 -
ACM计算几何题目推荐
计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠。3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片混乱,那么会严重影响做题正确率。4.注意精度控制。5.能用整数的地方尽量用整数,要想到扩大数据的方法(扩大一倍,或扩大sqrt2)。因为整数不用考虑浮点误差,而且运算比浮点转载 2013-07-25 22:05:29 · 1138 阅读 · 0 评论 -
POJ2007 凸包
题目:题目链接这道题目就是模版题,套用凸包的计算模版就行了#include #include #include #include #include #include using namespace std;#define maxn 55#define pi acos(-1)struct Point{ int x, y;} point[maxn];boo原创 2013-07-26 15:06:39 · 757 阅读 · 0 评论 -
POJ 1113 凸包模版题
题目: 题目链接题目的意思就是让你求出凸包,然后在一凸包向外延伸L米。问此时的环的长度是多少?#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;cons原创 2013-07-26 15:16:31 · 954 阅读 · 0 评论 -
POJ 1228 凸包
题目:题目链接这道题目最后写下来还是求凸包题意:题目输入一个凸包上的点(没有凸包内部的点,要么是凸包顶点,要么是凸包边上的点),判断这个凸包是否稳定。所谓稳定就是判断能不能在原有凸包上加点,得到一个更大的凸包,并且这个凸包包含原有凸包上的所有点。很容易得到,当一个凸包稳定时,凸包的每条边上都要有至少三个点,若只有两个点,则可以增加一个点,得到更大的凸包。原创 2013-07-26 15:35:18 · 883 阅读 · 0 评论 -
POJ3608-旋转卡壳
题目:题目链接 题意:给出两个多边形,求这两个多边形的最近距离 分析:旋转卡壳 学习旋转卡壳:如果多边形相交, 那么最小距离就变得没有意义了。 然而, 这个问题的另一个版本, 凸多边形顶点对间最小距离对于相交和非相交的情况都有解存在。回到我们的主问题: 直观的, 确定最小距离的点不可能包含在多边形的内部。与最大距离问题相似, 我们有如下结论:两个凸原创 2013-09-27 22:17:33 · 1369 阅读 · 0 评论