算法[计算几何]
丶singularity
今夕复何夕
展开
-
POJ 1039 Pipe <计算几何>
题目分析:初次做计算几何的题,看了一下ljr的《算法艺术与信息学竞赛》,这本书第三章就是计算几何初步,可以用来入门吧。书上p.359有这道例题,看一下前面的基础知识,应该就知道如何做了。代码:#include <iostream> #include <iomanip> #include <algorithm> #include <cmath> using namespace std;const do原创 2017-10-29 11:44:57 · 214 阅读 · 0 评论 -
POJ 3449 Geometric Shapes <几何(简单相交判断)>
题目分析:就是给一些多边形,多边形的边不会自交(简单多边形),求它们的相交情况(当某个多边形完全包含于某个多边形,不算相交)。代码:#include <cstdio> #include <iostream> #include <cmath> #include <vector> #include <string> #include <algorithm> using namespace std;con原创 2017-11-14 22:16:08 · 222 阅读 · 0 评论 -
POJ 2318 TOYS <计算几何>
题目分析:就是给一些点的坐标,判断它属于哪个区域。容易想到用以此点和右边界外一点为端点的线段与partitionpartition求相交情况,因为划分线段partitionpartition是有序的,所以我们可以用二分,求右方向最近相交的是哪一条线段,就可以知道属于哪个区域了。代码:#include <iostream> #include <cmath> #include <cstdio> #inc原创 2017-11-05 17:10:50 · 228 阅读 · 0 评论 -
UVa 248 Cutting Corners <计算几何+SPFA>
题目题目大意:给定起点坐标和终点坐标,以及一些矩形区域的三个点坐标,求起点到终点的最短路径长度(路径不能穿过矩形矩形区域)。分析:容易想到的是,将所有矩形的四个角以及起点和终点看做节点,若两个节点之间的连线不跨过任何矩形区域,则在此两节点间加一条边,边权即距离,如此建图后求最短路径就好了。需要注意的是,在矩形内部的节点应当删去,另外,因为我们判断是否跨过矩形是判断此线段与矩形的四条边是否规范相交,有原创 2017-11-03 16:58:57 · 319 阅读 · 1 评论 -
UVa 754 Treasure Hunt <计算几何(相交判断)>
题目题目大意:在100∗100100*100的方形区域里某地方有一宝藏,里面有一些障碍墙(没有多于两堵墙相交于同一点)将该区域分为若干小室,现在你只能从每个小室的墙壁的中间通过,问从外面到宝藏所在地最少通过几堵墙壁。分析:不要被所谓的只能通过中点所迷惑,实际上,因为那些墙将方形区域最外围的四面墙分为若干段,我们只需求每段的中点到宝藏的连线所跨过的墙的最少数就就好了。代码:include includ原创 2017-11-03 16:46:42 · 300 阅读 · 0 评论 -
POJ 2826 An Easy Problem?! <计算几何>
题目题目大意:墙上有两个等宽的木板(宽度为一个单位),问它们能够接到多少雨水。分析:就是求能够接到雨水的区域的截面面积,本来这道题没什么思考上的难度的,但是情况有很多种,一开始我就忽略掉了几种能够接到雨水的情况。。代码写了详细的注释,我感觉自己的代码写得还是挺清晰简洁的-.-代码:#include <iostream> #include <cmath> #include <algorithm> #i原创 2017-11-11 22:00:57 · 171 阅读 · 0 评论 -
POJ 1696 Space Ant <计算几何>
题目水题。。代码:#include <iostream> #include <cmath> #include <algorithm> using namespace std;const int EPS=1e-8; const int MAXN=55;struct Point; typedef Point Vec;struct Point{ int id,order; double x原创 2017-11-09 23:48:39 · 163 阅读 · 0 评论 -
POJ 1410 Intersection <计算几何(线段相交判断)>
题目分析:求给定的线段是否与给定的矩形相交。仔细审题啊,好多人吃了英语不好的亏。。另外就是线段之间非规范相交的判断方法,与直线与线段是不同的。代码:#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std;struct Point; typedef Point Vec原创 2017-11-09 22:32:29 · 176 阅读 · 0 评论 -
POJ 2653 Pick-up sticks <计算几何>
题目水题。。但是不知道为什么从后往前扫会超时。。代码:#include <iostream> #include <cmath> #include <cstring> #include <cstdio> #include <algorithm> using namespace std;const double EPS=1e-8; const int MAXN=1e5+5;struct Point; t原创 2017-11-09 09:16:45 · 172 阅读 · 0 评论 -
POJ 1269 Intersecing Lines <计算几何>
题目水题。。。代码:#include <iostream> #include <iomanip> #include <algorithm> #include <cmath> #include <cstring> using namespace std;const double EPS=1e-8;struct Point; typedef Point Vec; int dblcmp(double);s原创 2017-11-09 08:23:27 · 129 阅读 · 0 评论 -
UVa 393 The Doors <计算几何+最短路>
题目题目大意:在一个正方形的小室中,有一些障碍墙(0到18个),每个障碍墙有两扇门允许通过,你的目标是找到起点(x=0,y=5x=0,y=5)到终点(x=10,y=5x=10,y=5)的最短路径。分析:这是ljr《算法艺术与信息学竞赛》p.354的一道例题,书中给 出的解法是将这道题转化成图论中的最短路问题。将起点、终点以及所有门的两个边界点看做节点,两个点之间若可以直达,则在其所代表的的节点间加原创 2017-10-30 23:28:34 · 314 阅读 · 0 评论 -
POJ 3304 Segments <计算几何(直线与线段相交判断)>
题目题目大意:平面上有一些线段,问是否存在一条直线,使所有线段在这条直线上的投影至少有一个公共点。分析:如果存在这样一条直线,那么选取投影的一个公共点,过此点做这条直线的垂线,这条垂线与所有线段都相交,所以题目就转为了求是否存在一条直线与所有线段均相交。而如果存在这样的直线,我们总可以通过平移和旋转将其变化为,至少通过所有线段的某两个端点,这样我们枚举任意两个端点形成的直线即可。代码:#includ原创 2017-11-08 09:15:11 · 192 阅读 · 0 评论 -
POJ Ty Storage <计算几何>
题目水题。。代码:#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <bitset> using namespace std;const int MAXN=1e3+5;struct Point; typedef struct Point V;struct Point{ i原创 2017-11-07 23:14:22 · 120 阅读 · 0 评论 -
POJ A Round Peg in a Ground Hole <凸包判断以及点与多边形的相对位置>
题目题目大意:就是给一些点的坐标(in order),判断它们是否构成凸包,如果是构成凸包,在判断给定圆是否在凸包内(圆心位于凸包内,且半径不大于圆心与凸包边的最小距离)。分析:判断圆心是否在多边形内,采用环顾角的方法,若求得的环顾角为2π2\pi或−2π-2\pi则说明在多边形内(具体见lrj的黑书第三章)。代码:#include <iostream> #include <cmath> #incl原创 2017-11-15 14:41:43 · 288 阅读 · 0 评论