2012年2月19日
摘要: POJ_3384 题目的意思是说在多边形内安排两个圆,使得两个圆覆盖的区域尽可能大(重合的部分只算一次),求两个圆的圆心坐标。 首先,受POJ_3525这个题目的启发,我们先将凸多边形的边都向内收缩R,这样得到了一个新的凸多边形(新凸多边形的各个顶点可以通过求半平面交得到),那么两个圆的圆心必定在这个新凸多边形中,否则就会和原来的凸多边形的某条边相交。 现在圆心的可行域找到了,那么在什么情况下两个圆覆盖的区域最大呢?我们可以直观的看到两个圆离的越近,重合的部分就越大,那么也就是说两个圆离得越远越好,而怎么衡量远近呢?圆心距!于是我们就得到了进一步的算法,枚举新凸多边形的任意两个顶点,找到距离最 阅读全文
posted @ 2012-02-19 21:41 Staginner 阅读(769) 评论(0) 推荐(0) 编辑
摘要: POJ_3525 这个题目限制了是一个凸多边形,于是多边形所在的范围就等价于各个边所在的直线划分成的半平面的交,如果是凹多边形的话显然就不能这样等价了。 首先,我们可以把问题转化为求凸多边形的半径最大的内切圆,同时,我们会发现,如果各个边向内收缩r的话,内切圆的半径就会减少r,当缩到半平面交恰好不存在时,内切圆的半径也就为0了,这时向内收缩的距离r自然就是内切圆的最大半径了。 于是我们只要二分内切圆的半径r作为各条边向内收缩的距离,然后判断这时半平面交是否为空集即可,如果为空则说明向内收缩的过头了,于是就要更新max,否则就更新min。 值得一提的是,当半平面交恰好不存在时(或者说恰好存... 阅读全文
posted @ 2012-02-19 19:42 Staginner 阅读(758) 评论(0) 推荐(0) 编辑
摘要: POJ_1474 对于半平面交的一些简明扼要的介绍可以参考这篇博客:http://blog.csdn.net/accry/article/details/6070621。此外,这篇博客上介绍的还有我敲出的程序都只是比较好理解的O(n^2)的求半平面交的算法,对于O(nlogn)的算法可以参考朱泽园的论文。 由于这个题目指明了多边形上的点是按顺时针序给出的,因而就不用再将每组数据都其统一成某个顺序了。 POJ上这个题目INF不宜开太大,开太大比如0x3f3f3f3f会WA,但在ZOJ就没事,计算几何的精度问题太玄妙了,所以只好自己把握尺度啦。#include<stdio.h>#inc 阅读全文
posted @ 2012-02-19 16:16 Staginner 阅读(402) 评论(0) 推荐(0) 编辑
摘要: POJ_3130 对于半平面交的一些简明扼要的介绍可以参考这篇博客:http://blog.csdn.net/accry/article/details/6070621。此外,这篇博客上介绍的还有我敲出的程序都只是比较好理解的O(n^2)的求半平面交的算法,对于O(nlogn)的算法可以参考朱泽园的论文。 由于这个题目指明了多边形上的点是按逆时针序给出的,因而就不用再将每组数据都其统一成某个顺序了。#include<stdio.h>#include<string.h>#define MAXD 110#define zero 1e-8#define INF 100000s 阅读全文
posted @ 2012-02-19 16:12 Staginner 阅读(415) 评论(0) 推荐(0) 编辑
摘要: POJ_3335 这个题目是我写的第一个半平面交的题目,之前总以为半平面交是个很高深的东西,但实际上真正去接触它时才发现它其实也并不复杂,搞ACM的过程中很多时候都是这样,因为自己的畏怯而不敢去接触一类新的算法、题目,算是又跨过了一个小门槛,继续努力啦! 对于半平面交的一些简明扼要的介绍可以参考这篇博客:http://blog.csdn.net/accry/article/details/6070621。此外,这篇博客上介绍的还有我敲出的程序都只是比较好理解的O(n^2)的求半平面交的算法,对于O(nlogn)的算法可以参考朱泽园的论文。#include<stdio.h>#incl 阅读全文
posted @ 2012-02-19 16:09 Staginner 阅读(827) 评论(0) 推荐(0) 编辑