计算几何
文章平均质量分 76
zxy_snow
这个作者很懒,什么都没留下…
展开
-
ural 1348. Goat in the Garden 2
<br />又是山羊~~~<br /> <br />这次呢,它不吃草啦,要吃菠萝。。。<br /> <br />就是求点到线段的最短和最长距离。如果最短距离比L大,输出L - MIN 否则输出0。最长距离也是。<br /> <br />求最短距离直接套模板啦,其实也就是比较如果垂足在线段上的话的话,垂直距离最近。如果不在的话,比较到两端点的距离。<br /> <br />最远距离就是点到两端点的最远距离。<br /> <br />WA在17组数据了,看了DISCUSS (啊。。。坏习惯T T ) 没考虑线段原创 2011-05-10 13:09:00 · 819 阅读 · 0 评论 -
zoj 2010 || poj 1380 Equipment Box
这个题哈。。之前和会升讨论过,推算公式无果,他用神马离散化过掉了。。。我今天重新看这题,也用了那个方法。。传说中的离散化,这题感觉就是,一个一个试。。。把里面的矩形每次旋转一定角度,然后根据角度求出包含它的最小矩形的长宽,然后和给的对比。开始用弧度,死活过不去,后来看会升的,他居然判等了= =。。明明题目上说不能碰边界的。。。我改成等后zoj还是不对,改成角度,才过了,增量0.1,0.2就WA了,1S过的 = =。。。题意坑姐啊。。后来用弧度制,一个一个试,增量0.003才过,0.004就WA。。。刚搜了下原创 2011-05-08 23:23:00 · 1176 阅读 · 0 评论 -
ural 1084. Goat in the Garden
水题啦。。给你一个正方形区域,中间有个柱子栓了一只山羊,给出方形的边长和山羊绳子的长度,求山羊不超过方形所能吃到草的面积。三种情况,绳子长 边长一半 && 绳子 用了两种方法求解。。。没测出来哪个精度高。。。都A了。。#include #include #include #include #include #include #include #include #include using namespace std;const double pi = acos(-1原创 2011-05-09 17:46:00 · 1255 阅读 · 0 评论 -
zoj 2403 || poj 2194 || poj 2850 Stacking Cylinders
买一赠二啊。。。。T T 。。。poj这两题居然完全一样,就输入方式不一样,情何以堪!什么质量啊。。给你最后一排球的坐标,求最顶层的球的坐标。我直接一排一排模拟的,无奈用的三角函数,精度死活达不到,WA死了。。。搜题解,学到一个向量旋转的方法,http://dumbear.com/blog/?p=143 可以看下这个。总之呢,能不用精度的就不要用了。还有一种方法就是,因为题目已经告诉你了,最顶的球的x坐标一定是最左和最右球坐标的中点,http://fghtech.blogbus.com/logs/56860原创 2011-05-14 13:40:00 · 1329 阅读 · 0 评论 -
ural 1207. Median on the Plane
<br />一堆点(偶数个),任意三点不共线,挑两个点使之连成的线把所有点分成相等两部分 ,求这两个点。<br /> <br />想了好久不知道做法,忍不住搜题解了,只是个极角排序就完了,无语。<br /> <br />我想了想,选了最左下方的角,然后极角排序,然后这两个点就是左下角的点,和极角排序后中间的那个点。<br /> <br />因为任意三点不共线,所以这两点一定能把整个分成相等的两部分。后来想了下,其实任意找一个点,只要其它点都在它的一个张角小于180度的方向上,那么按极角排序,取它和中间的那个原创 2011-05-12 12:31:00 · 1303 阅读 · 0 评论 -
hdu 1086 You can Solve a Geometry Problem too
<br />求出线段相交的对数<br /> <br />啦啦~~看算导的~~~我觉得计算几何蛮有意思的哇~~~不解释啦~~<br /> <br />#include <queue>#include <stack>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <iostream>#include <limits.h>#include <string.h>#include <algorithm>u原创 2011-04-07 19:51:00 · 916 阅读 · 0 评论 -
zoj 1648 Circuit Board
还是判断两线段相交,水题。郁闷的是,我加了精度判断过不去,没加反而A掉了。。。好纠结。。#include #include #include #include #include #include #include #include #include using namespace std;const double eps = 0.00;typedef struct Point{ double x,y;}Point;typedef struct Line原创 2011-04-07 20:29:00 · 748 阅读 · 0 评论 -
zoj 1465 || poj 1113 Wall
<br />看论文的时候看到的题,给你一个多边形,需要用最少的离这个多边形远为L的墙围住。凸包的话是距离最短的。画图的话,可知,拐角部分都是圆弧,整个一周下来正好是半径为L的圆的周长。所以结果就是凸包周长+圆周长。<br /> <br />我发现死活过不去,然后看人家的排序,我没有判断距离,改了改,居然过了><。。。难道我以前写的凸包排序都是错的??!!、、、好恐怖。。。记住了。。<br /> <br />#include <queue>#include <stack>#include <math.原创 2011-04-13 19:04:00 · 878 阅读 · 0 评论 -
zoj 1453 Surround the Trees(我的第一个凸包,哇咔咔)
凸包,凸包,凸包。。。T T 。。今天上午在机组课看算导看懂了~~~,下午算法实验课,花了快一节课才想对>这题就是求凸包的点连成环的长度。n = 1和2的时候需要特殊处理,开始我2没有乘2,WA得一塌糊涂T T 。。这个没有加精度判断。。。#include #include #include #include #include using namespace std;const int MAX = 120;typedef struct Point{ double x,y;原创 2011-04-11 23:12:00 · 1459 阅读 · 0 评论 -
poj 2187 Beauty Contest(最远点对)
<br />有一个性质,最远点对一定是凸包上的点的连线,直接求凸包,然后枚举下点距离即可。<br /> <br />这题输出的是距离的平方。><。。。<br /> <br />#include <stdio.h>#include <stdlib.h>#include <iostream>#include <algorithm>#include <math.h>using namespace std;const int MAX = 50010;const double eps =原创 2011-04-12 15:07:00 · 1151 阅读 · 0 评论 -
zoj 1041 || poj 1106 Transmitters
<br />给你半圆的圆心和半径,还有一些点,求能在半圆内的最多的点数。<br /> <br />><。。才发现,我2了,排序干嘛啊><。。。<br /> <br />输入的时候筛掉半径大于r的点,然后枚举即可><。。。用叉积,判断在同一方向,就是在这个180°内。<br /> <br />我开始按极角排序了,后来想想,完全不用><。。。排序我还纠结了老半天。。。这题真是水题啊啊啊<br /> <br />#include <queue>#include <stack>#include <math.原创 2011-04-17 16:26:00 · 1225 阅读 · 0 评论 -
判断点在多边形内的多种写法
<br /><br />再经典不过的算法了: <br /> <br />// 功能:判断点是否在多边形内 <br />// 方法:求解通过该点的水平线与多边形各边的交点 <br />// 结论:单边交点为奇数,成立! <br /> <br />//参数: <br />// POINT p 指定的某个点 <br />// LPPOINT ptPolygon 多边形的各个顶点坐标(首末点可以不一致) <br />// int nCount 多边形定点的个数 <br /> <br /> <br />BOOL Pt转载 2011-04-19 23:25:00 · 3952 阅读 · 0 评论 -
zoj 2107 Quoit Design(最近点对)
<br />最近点对,分治法。<br /> <br />开始写错了,居然A掉了><。。。而且居然排第一版了><。。。。无语啦。。。<br /> <br />需要先对x排序,然后分治的时候对y排序才对。精度判断WA了多次,最后找到,getmin如果改成小于等于就过了,或者不加精度判断也行,小于的话死活过不去,我把eps开到15次方才过><。。。郁闷<br /> <br />#include <queue>#include <stack>#include <math.h>#include <stdi原创 2011-04-20 13:02:00 · 2034 阅读 · 1 评论 -
zoj 1081 Points Within (判断点是否在多边形内)
<br />射线相交法判断。<br /> <br />这个点向右发出一条射线,如果和多边形相交交点为奇数,则这个点在多边形内,反之不在。证明神马的自己证吧。<br /> <br />开始用int错得一塌糊涂,因为我的射线x坐标开得不够大,如果大的话,叉积判断后可能超int了,后改成doubleA掉了,注意输出块中间有换行,不是每块都有换行。<br /> <br />开始木有加精度判断,现在加下精度判断,就可以当我的模板了~~<br /> <br />#include <queue>#include <s原创 2011-04-21 19:33:00 · 1332 阅读 · 0 评论 -
UVA 10002 Center of Masses
给你一个凸多边形的点(又是无序),求质心。 质心和重心有什么区别呢?百度了下,发现,如果重力场均匀的话,这俩心重合。 那直接求重心好了。 因为无序,所以需要用凸包求下,然后再求重心。 #include #include #include #include #include #include #include #include #inc原创 2011-06-09 21:43:00 · 1313 阅读 · 0 评论 -
UVA 218 Moth Eradication
水题。 顺时针输出凸包的点,求出凸包边长的总长度。 经测试,不存在n = 1的情况。也没说具体有多少个点。。。这题真是的。。 #include #include #include #include #include #include #include #include #include #include using namespace原创 2011-06-09 21:49:00 · 1129 阅读 · 0 评论 -
zoj 2551 || poj 2653 Pick-up sticks
按顺序扔出来一些棍子,求最后那些棍子在上面。按照顺序,如果后面的线段和前面的线段相交了,那前面线段肯定不可能在最上面。开始TLE死了。。。>#include #include #include #include #include #include #include #include using namespace std;const double eps = 1e-6;原创 2011-04-22 15:41:00 · 1213 阅读 · 0 评论 -
zoj 1010 Area
<br />给你一些点(按顺序),先判断这些点是否组成一个多边形,题目已经很清楚了,如果不是一个多边形,那么它的一条边和其他非直接相邻的边相交了。如果是多边形,输出多边形面积。<br /> <br />n = 1 和2的时候必然不是多边形,需要特判。<br /> <br />这个求多边形是把一个多边形分解为多个三角形,还是利用叉积来计算的,手工模拟太痛苦了><。。。不弄了。<br /> <br />#include <queue>#include <stack>#include <math.h>原创 2011-04-21 22:51:00 · 1148 阅读 · 0 评论 -
zoj 1280 || poj 1269 Intersecting Lines
<br />给你两条直线,判断这两条直线是否共线,相交,不相交(即平行),相交的话输出交点。<br /> <br />判断平行,然后通过叉积判断是否共线。<br /> <br />平行判断可以判断两条直线的斜率是否相等。<br /> <br />交点的话,相当于联立方程组求解了。<br /> <br />这些方程看模板理解的,刚才搜了下,有人讲得比较清楚,借鉴下http://blog.csdn.net/dreamvyps/archive/2011/01/25/6162690.aspx<br /> <br /原创 2011-04-22 13:45:00 · 2338 阅读 · 0 评论 -
UVA 11626 Convex Hull
凸包。。。我要刷光各大OJ的凸包。。。 从discuss学来的。。。刚开始没看懂题意都。。想麻烦了。。 这个题是给你凸包上的点,给的无序,让你排出来有序的。 这个方法遇到一种情况就坏了。。。 就是下图: 但是,对于凸包来说,一定能找到一个点,过这个点平行于Y轴或者X轴的直线 能划分成两个区域。 不过具体怎么求,还要想想。 这道题是直接告诉原创 2011-06-08 15:18:00 · 1691 阅读 · 5 评论 -
哇咔咔,写了个自认为蛮有成就感的东东~~
^ ^ 凸包点的排序~~~~就是稍微繁琐了点~~~可以找内点排的。。。想想怎么找内点呢~ 啊,想起来了,内点可以用重心,哇咔咔,写写试试哈。 内点排序,写了 过了。 = =被GB鄙视了。。。其实任意找几个点,然后求中点。。一定在凸包内部的。。O(1)的 T T 代码见: http://blog.csdn.net/zxy原创 2011-06-08 18:19:00 · 705 阅读 · 0 评论 -
poj 3608 Bridge Across Islands(旋转卡壳求俩凸包间最小间距)
神呐!!!!!!! 折腾了两天多!!!(其实有效率地去想去写应该一天吧)。。 原来的想法很淳朴(好吧,很笨),就是找出来卡壳的那两条线,然后算出每条线离它相应的那条边的角度,然后旋转。 分为三种情况 1、两条线都和凸包的边平行 2、和第一个凸包的某边平行 3、和第二个凸包的某边平行 然后这三种情况,分别算出来下次应该存在的卡壳,就这么下去。原创 2011-06-12 22:31:00 · 2005 阅读 · 1 评论 -
poj 2318 TOYS
给你一个盒子,然后很多隔板,以及toys的坐标,问你每个隔板里有多少个玩具。隔板是按从左到右给的,而且不会相交,所以区域就是n+1块。注意toy可以在边界上,但是不能在隔板上。我直接枚举了,枚举每个点可能在哪个区域里,如果在这个区域里,一定满足在相对每个边来说是在左手边,这个判断用叉积就好了。后来党说可以用那个,发出一条射线,然后如果有奇数个交点说明在多边形内,这个之前见过,但是没写过,我这个1000+MS过了。。好慢啊。。。党说那个觉得蛮繁琐的,因为这个每个区域只有四个点,所以不需要判断那么多。。1A,开原创 2011-04-19 23:17:00 · 1852 阅读 · 0 评论 -
poj 1329 Circle Through Three Points
<br />给三角形的三点,求出外接圆圆心以及半径,填到方程组里。。<br /> <br />输出太恶心了><。。。因为如果是 + -4,需要改成- 4 。。。。我搜了下,貌似我的方法还是相对简单的。。。<br /> <br />#include <queue>#include <stack>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <iostream>#include <limits.h>#in原创 2011-04-24 19:10:00 · 1093 阅读 · 6 评论 -
zoj 1996 || poj 2398 Toy Storage
和poj2318是姐妹篇吧~~~ 这个题需要排序,排成poj2318那种的,然后统计下就好。具体题意详见2318 http://blog.csdn.net/zxy_snow/archive/2011/04/19/6334800.aspx#include #include #include #include #include #include #include #include #include using namespace std;const int MAX = 1原创 2011-04-22 19:09:00 · 1265 阅读 · 0 评论 -
zoj 1377 || poj 1228 Grandpa's Estate
给你凸包上的点,求是否可以确定一个凸包。开始木有理解哇,>因此,需要满足凸包每条边必须有三个点,这样的话,如果外界还有点的话,拉的话,就不是凸多边形了,自己可以模拟下。根据这个 ,看图判断凸包上三点这个,我做的比较麻烦,分两种情况,如果在线段上(不在端点),可以,如果和这两点共线(不在端点),也可以。后来想了下,既然题目已经给出的是凸包的点,那就不用graham算法了吧?改了改,不对。因为我需要按顺序去判断凸包的边,如果仅仅是排序,排不出来按顺时针或者逆时针的情况>#include #include原创 2011-04-24 12:09:00 · 1687 阅读 · 0 评论 -
zoj 2352 || poj 2007 Scrambled Polygon
<br />啊 水题~<br /> <br />给你凸多边形的点,然后按极角排序,输出即可。按第一个点为原点~~一个叉积快排即可。。<br /> <br />#include <queue>#include <stack>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <iostream>#include <limits.h>#include <string.h>#include <algorith原创 2011-04-23 21:24:00 · 1254 阅读 · 1 评论 -
zoj 2459 Pyramids
给出四面体的六条楞,求体积,欧拉四面体公式 poj2208用这个公式死活过不了,难道是因为用SPJ了么 T T 。。 #include #include #include #include #include #include #include #include #include #include using namespace std;//计原创 2011-06-16 13:02:00 · 653 阅读 · 0 评论 -
UVA 10173 Smallest Bounding Rectangle(旋转卡壳求最小面积外接矩形)
神呐。。。终于过了 T T 。。。 一个卡壳卡两天啊啊啊啊 !!!至少两天啊啊啊啊 !!!T T 。。。 这两天都是,不想复习了,就在纸上画画卡壳。。。画画凸包。。。然后想这个题怎么实现比较好。。。 我开始还是枚举旋转最小角度,代码十分之繁琐。。。其实我写差不多了,但是应该是有问题的,如果凸包是三角形,怎么都枚举不对T T 。。 丫丫的,索性今天下午想了想,改成每次原创 2011-06-15 22:13:00 · 3994 阅读 · 0 评论 -
UVA 10065 Useless Tile Packers
水题,求个面积,再求个凸包的面积,减一下除以凸包面积即可。 复制的时候 多复制了个空格,PE了次。。以为是换行问题,改了下WA了。。。后来才看到。。。看来复制输出也要小心啊。。 #include #include #include #include #include #include #include #include #include #inc原创 2011-06-21 12:16:00 · 1760 阅读 · 0 评论 -
poj 2954 Triangle
<br /> <br />给你三角形的三点,求出在三角形内部的整点。<br /> <br />还是这个,[Pick定理] 设以整数点为顶点的多边形的面积为S, 多边形内部的整数点数为N, 多边形边界上的整数点数为L, 则 <br /> <br />N + L/2 - 1 = S<br /> <br /> <br />#include <queue>#include <stack>#include <math.h>#include <stdio.h>#include <stdlib.h>原创 2011-04-26 15:02:00 · 1006 阅读 · 0 评论 -
poj 1654 Area
<br />楼教主出的题耶。。。<br /> <br />WA得厉害,看下discuss才知道,越界了><。。。这个习惯可不好啊。。。。><。。。<br /> <br />而且这个不能直接开double的,double精度不够,用long long才过。而且还限制内存了,不过100W的int还是开得起的。<br /> <br />给你起点0,0,然后走向,求形成的多边形的面积。很水啦。。<br /> <br />#include <queue>#include <stack>#include <ma原创 2011-04-27 12:55:00 · 1145 阅读 · 0 评论 -
zoj 1139 || poj 1468 Rectangles
<br />判断一个矩形是否在另一个矩形里,直接判断四个点是否在矩形里即可。暴力。。<br /> <br />#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <queue>#include <stack>#include <math.h>using namespace std;const int MAX =原创 2011-04-28 20:51:00 · 1581 阅读 · 0 评论 -
UVA 10088 Trees on My Island
又是这种题哈,计算多边形里面内整点的个数。 以前做过,这次直接上模板了。。 [Pick定理] 设以整数点为顶点的多边形的面积为S, 多边形内部的整数点数为N, 多边形边界上的整数点数为L, 则 N + L/2 - 1 = S 注意范围,我用long long 了,因为中间乘法往转换了 WA了一次。。。T T #include #include原创 2011-06-20 22:48:00 · 1103 阅读 · 0 评论 -
UVA 634 Polygon
判断点是否在多边形内,我的这个模板好久没用了。。。用了下,蛮顺利的。。 #include #include #include #include #include #include #include #include #include #include using namespace std;const int MAX = 1010;struc原创 2011-06-21 12:44:00 · 126 阅读 · 0 评论 -
UVA 10652 Board Wrapping
哇咔咔,这题RANK 8 (*^__^*) 嘻嘻……巨开心~~ 其实这题也不难哈,但是为嘛做的人这么少捏。。 就是给你N个矩形,问你所有矩形的面积占包围这个矩形的面积的百分比。 矩形的面积很好弄,长*宽即可,但是所有包围这个矩形的面积呢。既然是包装,肯定是个凸包,所以只要计算矩形的四个点,然后以这四个点作为一个点集求凸包即可。 这四个点的话,有点数学知识就原创 2011-06-21 23:31:00 · 998 阅读 · 0 评论 -
poj 1118 Lining Up || poj 2780 Linearity || poj 2606 Rabbit hunt
本来1118没想起来什么方法,O(N^3)过了,去百度搜看有啥好方法没,搜到了好几道这样的题,代码一贴,改改输入,改改数组范围,居然都过了,我表示。。。无语了。。一个优化方法是,枚举每个点为起点,然后求得每个点和这个点的斜率,然后对斜率排序,然后再统计。N^2*LOGN的时间复杂度,140+MS过了。无优化版#include #include #include #include #include #include #include #include using names原创 2011-04-29 11:01:00 · 2364 阅读 · 4 评论 -
zoj 1704 || poj 1569 Myacm Triangles
初看这题,zoj过人才100,poj才400+。。。还以为是啥难题。读了读题,怎么感觉也不像难题啊。。。写了写,结束符没注意0.。。WA了一次,然后A掉了,zoj1A了。。。我去。事实证明,做得人少的不一定是难题啊。。。给你一些点,然后求出一个三角形,满足三角形内部和边上不许有其他点,求这个三角形面积最大。最多才15个点,枚举下,15^4,这个也很小啊 = =。。我判断点在三角形内部用的叉积,在三点的方向一致即可。因为只有三点,不一定是顺时针还是逆时针,都考虑就好了。#include #include原创 2011-04-30 13:33:00 · 1263 阅读 · 3 评论 -
zoj 1973 || poj 1939 Diplomatic License
<br />本来是看1974呢,结果题目很多Problem D神马的,那我就找到1973了,水题。求出多边形边上的中点即可。<br /> <br />开始没用这种输出,后来改了,忘加换行了,zoj直接WA了,poj还给个PE。。。强大的poj。。<br /> <br />#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <queue原创 2011-05-01 13:24:00 · 2186 阅读 · 0 评论 -
zoj 1974 || poj 1940 Polygon Programming with Ease
1973是给出顶点求中点,这个是给出中点求顶点。和会升讨论了下,发现可以用一个顶点去替代所有顶点,然后解方程。后来我发现,如果是偶数点的话,最后那个顶点的坐标被消去了!不过还好,给的是奇数个顶点。#include #include #include #include #include #include #include #include using namespace std;const int MAX = 1010;struct point{ double原创 2011-05-01 14:14:00 · 1692 阅读 · 0 评论