摘要: hdu1255 覆盖面积题意:求N个矩形中,求被覆盖至少俩次的面积和分析:一开始以为用总面积减去面积并就可以了,可是想了想,当面积被覆盖了俩次以上,就漏减 了,所以只能老老实实算了。具体方法跟求面积并十分类似,求面积并时,排完序之后,每次插入一条线段之后,求出整个区间当前被覆盖的总长度再乘以 前后俩条线段的水平距离;而这道题目,每次插入一条线段之后,求整个区间当前被覆盖至少俩次的总长度再乘以水平距离,;要求整个区间被覆盖至少俩次的总长度,只需在原有代码上添加几个更新而已,具体代码附了解释#include<iostream>#include<algorithm>#defi 阅读全文
posted @ 2011-10-02 21:00 枕边梦 阅读(623) 评论(0) 推荐(0) 编辑
摘要: 求N个矩形的面积并,这个比周长并要简单的多,不过涉及到了离散化,根据相对大小,给对应的double型数据编号,插入是再二分查找编号即可也可以用矩形切割去做,代码简单很多矩形切割#include<iostream>#include<algorithm>#include<string>#include<math.h>using namespace std;const int N = 100+10;struct rec{ double p1[2],p2[2];}r[N];rec rr[N*N];int total;inline double get_a 阅读全文
posted @ 2011-10-02 19:10 枕边梦 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 这困扰我N久的题目,终于过了。求N个矩形的周长并,一开始觉得太遥不可及了,感觉好复杂 ,总想先搞懂计算的方法,再看大牛的方法,可是N久之后,对那个方法还是一知半解;今天结合了代码还有下面俩副图之后,突然觉得豁然开朗啦,自己敲了一遍代码……重点:我觉得,最重要的就是理解下面三个式子了,理解了之后,就知道该怎么建立线段树了;ans+=num[1]*(ss[i+1].x-ss[i].x);(横边)ans+=abs(len[1]-last);(竖边)last=len[1];对所有的竖边按照x值从小到排序,之后按顺序插入线段树;ans累加的是最终结果,num[1]是整个区间内连续的线段数(将竖边投影到y 阅读全文
posted @ 2011-10-02 16:31 枕边梦 阅读(1238) 评论(1) 推荐(0) 编辑