上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 85 下一页
  2012年2月13日
摘要: POJ_3449 这个题目由于图形很少,思路还是很直接的,暴力就可以了,枚举任意两个图形,并枚举两个图形间所有线段的位置关系,如果存在两条线段相交,那么这两个图形就是相交的。 这个题的输入输出比较恶心,此外,对于正方形已知一对点求另一对点时可以用向量的旋转来求,首先求得正方形中心的坐标,然后将中心到两个点的连线看作两个向量,将这两个向量各旋转90度就可以得到中心到另外两个点的向量,进而就可以求得另外两个点的坐标了。向量的旋转可以参考矩阵运算中的一些内容:http://www.matrix67.com/blog/archives/276/。#include<stdio.h>#incl 阅读全文
posted @ 2012-02-13 11:49 Staginner 阅读(211) 评论(0) 推荐(0) 编辑
摘要: POJ_1039 比较容易理解,如果光线最优的话是可以认为至少与某两个点相切的,因为如果不和某两个点相切,我们可以将光线进行平移和旋转使其至少和某两个点相切,而且结果不会变差。 于是我们可以枚举任意两个顶点确定一条直线作为光线的路径,之后只要看这条光线最多能够射多远即可。一个可行的思路就是首先判定这两个顶点及以前的光线是否在管子内,如果在管子内,再依次去判定光线最远能射到哪里。判定光线是否在管子内可以判定光线与每对顶点的纵截面的交点是否在管子内。#include<stdio.h>#include<string.h>#define MAXD 50#define zero 阅读全文
posted @ 2012-02-13 08:51 Staginner 阅读(369) 评论(0) 推荐(0) 编辑
  2012年2月11日
摘要: POJ_2826 这个题目暂且不讨论精度的问题了,因为discuss上面有相当一部分人在吐槽精度,所以如果你A不掉的话可以考虑discuss上面的一些建议。 这个题目确实要考虑到比较多的情况,我们不妨一一分析。 首先,如果两个线段都没交点了,肯定存不了水,因此我们不妨先剔除掉不相交的情况。为了能简化后面叉积的讨论,我们可以先将平行的情况特判一下。 接下来,我们就讨论:如果两个线段有交点就一定能存水吗? 比较容易画出一种情况,就是开口向下,同时上方没有开口的情况,也就是把sample1的形状上下颠倒一下。但对于一般的问题呢? 我们不妨将水填上,会发现这个类似木桶效应,水存多少是取决于最... 阅读全文
posted @ 2012-02-11 00:34 Staginner 阅读(539) 评论(0) 推荐(0) 编辑
  2012年2月10日
摘要: POJ_3347 首先我们要确定每个正方形安放的位置,只要枚举前面已经放好的正方形并计算当前正方形安放的位置,最后再取这些位置中最右边的位置即可。 接着我们要计算每个正方形上方能否被其他正方形覆盖。显然,如果某一个正方形的边长比当前的正方形边长更小,是不可能覆盖到当前的正方形的。除此之外,我们可以先计算一下当前正方形左边的正方形能覆盖到的最右边的位置,以及右边的正方形能覆盖到的最左边的位置,依据这两个值便很好判定当前正方形是否被完全覆盖掉了。#include<stdio.h>#include<string.h>#include<math.h>#define 阅读全文
posted @ 2012-02-10 22:47 Staginner 阅读(378) 评论(0) 推荐(0) 编辑
摘要: POJ_1696 一个比较直观的思路就是,如果现在我在某个点,那么我就要沿着刚刚走过的一段的方向看过去,然后视线逐渐向左转,遇到第一个点为止,然后就冲那个点走过去即可。对于起点的选择也并不难想到,挑一个y值最小的点即可,初始的视线方向就定为沿x轴正方向,如果有多个y值最小的点,那就随便选一个,因为无论选哪一个最终都是可以走出合法的路线的。 剩下一个问题就是如果判断视线左转时遇到的第一个点了,出于方便处理的考虑,我们可以选用左转的角度theta来衡量,而theta可以通过点积及相关运算得到。同时,我们注意到theta是在0到pi之间的,于是我们也可以选用一个等价的变量cos(theta)来衡量, 阅读全文
posted @ 2012-02-10 21:59 Staginner 阅读(315) 评论(0) 推荐(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) 推荐(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) 推荐(0) 编辑
摘要: POJ_1066 一个比较直观的思路就是,把每个房间看作一个点,每个门看作一条边,然后去BFS求解。但是,对于房间的确定是很棘手的,很难用有效的手段将这些房间一一标号。 于是,不妨转化一下思路,把每个门看作一个点。门还是比较好找的,对于任意一条直线,现将其上所有交点找到,相邻的两个交点的中点自然就是门。这样还剩下一个问题就是这些门之间的边该如何构造?我们任意连一下两个门,不难发现,如果这两个门可以直接到达的话,那么这两个门之间连线形成的线段是和其他线段都不会形成规范相交的,而如果这两个门不可以直接到达的话,则至少会和某一条线段形成规范相交的。 因此,我们就有了思路一: 首先枚举线段,将... 阅读全文
posted @ 2012-02-10 01:06 Staginner 阅读(339) 评论(0) 推荐(0) 编辑
  2012年2月8日
摘要: POJ_2653 这个题目有一个条件比较关键,就是“You may assume that there are no more than1000top sticks.”,这样如果我们边读入线段,便进行判断前面哪些被覆盖掉的话,会达到大约10^8左右的复杂度,而如果全部读完之后再逐一判断则是10^10的复杂度。 这个题目没有明确说两个sticks在非规范相交的情况下算不算一个在另一个只上,看别人的题解说如果只有一个端点在另一条线段上,那么两个线段视作是不相互覆盖的,而且这个题也没有两条线段在一条直线上且部分重合的情况,所以我就偷懒了,只写了判断规范相交的代码。#include<stdio. 阅读全文
posted @ 2012-02-08 22:29 Staginner 阅读(367) 评论(0) 推荐(0) 编辑
  2012年2月7日
摘要: POJ_3304 这个题一开始不知道project什么意思,理解成了判断是否存在一条直线能够和所有线段相交,后来百度project的意思之后发现原来是看是否存在一条直线使得当所有线段先直线投影之后,这些投影至少有一个公共点。理解对意思后反倒没什么思路了,后来想了一下突然发现原来就是要转化成我一开始那个“错误”的理解去做…… 我们不妨设存在这样的一条直线,那么当直线在合理的范围内旋转过程中一定会出现过某两个线段的端点的情况,所以我们只要枚举任意两个端点作为这样的直线即可。需要注意的是,当枚举的两个端点很近的时候,fabs(x1-x2)<1e-8&&fabs(y1-y2)&l 阅读全文
posted @ 2012-02-07 08:50 Staginner 阅读(759) 评论(0) 推荐(0) 编辑
上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 85 下一页