摘要:
POJ_3347 首先我们要确定每个正方形安放的位置,只要枚举前面已经放好的正方形并计算当前正方形安放的位置,最后再取这些位置中最右边的位置即可。 接着我们要计算每个正方形上方能否被其他正方形覆盖。显然,如果某一个正方形的边长比当前的正方形边长更小,是不可能覆盖到当前的正方形的。除此之外,我们可以先计算一下当前正方形左边的正方形能覆盖到的最右边的位置,以及右边的正方形能覆盖到的最左边的位置,依据这两个值便很好判定当前正方形是否被完全覆盖掉了。#include<stdio.h>#include<string.h>#include<math.h>#define
阅读全文
posted @ 2012-02-10 22:47
Staginner
阅读(378)
推荐(0)
编辑
摘要:
POJ_1696 一个比较直观的思路就是,如果现在我在某个点,那么我就要沿着刚刚走过的一段的方向看过去,然后视线逐渐向左转,遇到第一个点为止,然后就冲那个点走过去即可。对于起点的选择也并不难想到,挑一个y值最小的点即可,初始的视线方向就定为沿x轴正方向,如果有多个y值最小的点,那就随便选一个,因为无论选哪一个最终都是可以走出合法的路线的。 剩下一个问题就是如果判断视线左转时遇到的第一个点了,出于方便处理的考虑,我们可以选用左转的角度theta来衡量,而theta可以通过点积及相关运算得到。同时,我们注意到theta是在0到pi之间的,于是我们也可以选用一个等价的变量cos(theta)来衡量,
阅读全文
posted @ 2012-02-10 21:59
Staginner
阅读(315)
推荐(0)
编辑
摘要:
POJ_1410 几个需要注意的地方: ①给出的矩形顶点的坐标需要自己重新排下序再使用,看discuss说所谓的top等并不是严格指上方,只是一个相对的参考,所以要重新排下序再用。 ②因为题目里面说了矩形的内部也算矩形的一部分,所以线段在矩形内部是认为和矩形相交的。 ③在判断线段与矩形四个边是否有交点时,要注意对非规范相交的判定,当线段和边共线且不相交时叉积也为0。#include<stdio.h>#include<string.h>#define zero 1e-8double xs, ys, xe, ye, xl, yl, xr, yr, x1[5], y1[5],
阅读全文
posted @ 2012-02-10 20:44
Staginner
阅读(340)
推荐(0)
编辑
摘要:
POJ_1269 可以先用叉积判断两条直线是否共线或者平行,如果有交点再用解析几何的办法就交点即可。#include<stdio.h>#include<string.h>#define zero 1e-8double x1, y1, x2, y2, x3, y3, x4, y4;double det(double x1, double y1, double x2, double y2){ return x1 * y2 - x2 * y1;}double fabs(double x){ return x < 0 ? -x : x;}int dcmp(double x
阅读全文
posted @ 2012-02-10 01:45
Staginner
阅读(241)
推荐(0)
编辑
摘要:
POJ_1066 一个比较直观的思路就是,把每个房间看作一个点,每个门看作一条边,然后去BFS求解。但是,对于房间的确定是很棘手的,很难用有效的手段将这些房间一一标号。 于是,不妨转化一下思路,把每个门看作一个点。门还是比较好找的,对于任意一条直线,现将其上所有交点找到,相邻的两个交点的中点自然就是门。这样还剩下一个问题就是这些门之间的边该如何构造?我们任意连一下两个门,不难发现,如果这两个门可以直接到达的话,那么这两个门之间连线形成的线段是和其他线段都不会形成规范相交的,而如果这两个门不可以直接到达的话,则至少会和某一条线段形成规范相交的。 因此,我们就有了思路一: 首先枚举线段,将...
阅读全文
posted @ 2012-02-10 01:06
Staginner
阅读(339)
推荐(0)
编辑