摘要: 题意:给n个矩形,每个矩形都有一个矩形的“洞”,矩形和洞的边都与坐标轴平行,求这些带“洞”的矩形覆盖的面积。数据范围:n<=50000, 0<=x,y<=50000分析:这题本质还是求矩形面积并,因为一个带“洞”的矩形可以看成是4个矩形。由于矩形数目n和坐标范围均比较大,所以离散化+暴力统计的方法肯定会超时。扫描线的方法我也是第一次学,我的理解是这样的,把所有矩形的2条竖直边(横边也一样)无限延伸就得到扫描线,这些线把所有矩形重新划分为许多不相交的矩形,所有矩形的面积并其实就是夹在这些线之间的矩形的面积之和,夹缝中的矩形的宽就是扫描线之间的距离,关键在于夹缝中矩形的高度是多少 阅读全文
posted @ 2012-08-05 20:07 BeatLJ 阅读(836) 评论(0) 推荐(0) 编辑
摘要: 题意:在二维平面上给出n个矩形的顶点坐标(浮点数),每个矩形的边都平行坐标轴,求矩形覆盖的面积。数据范围:n<=100, 0=<x,y<=100000分析:由于n比较小,所以用离散化就能过(离散化的具体分析见上一篇)。View Code #include <stdio.h>#include <string.h>#include <stdlib.h>#define N 110int n;double xl[N],yl[N];double xr[N],yu[N];double x[2*N],y[2*N];int xcnt,ycnt;bool f 阅读全文
posted @ 2012-08-05 14:47 BeatLJ 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 题意:在二维平面上给出n个矩形的坐标,矩形的边与x轴和y轴平行,求这n个矩形覆盖的面积。数据范围:n<=1000, x,y均为不大于50000的正整数分析:由于坐标都是整数的,我们可以把二维平面看成由面积都是1的小方格组成,最暴力的方法就是标记每个矩形覆盖的小方格,最后再统计一共有多少小方格被覆盖,但是坐标平面太大了,最坏情况下为50000*50000,肯定超时了。虽然坐标范围比较大,但是矩形个数却比较小,此时不难想到离散化,离散化后,我们不再将坐标平面划分为面积为1的小方格,而是根据在n个矩形中出现过的坐标来划分,这样的话,最后划分出来出来的方格数目不会超过2n*2n,这样就不会超时了 阅读全文
posted @ 2012-08-05 13:23 BeatLJ 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 模型:给一个n个点的无向带权图,求从指定起点出发,经过指定的k个点(顺序不定)最后回到起点的最小代价。数据范围:n<=10^4, m<=10^5, k<15分析:先求最短路,求出从指定的k+1(含起点)个点到其他点的最小代价,然后建立k+1个点之间的最小代价邻接矩阵。最后用状态压缩DP求结果(状态压缩DP参考上一篇)。View Code #include <stdio.h>#include <string.h>#include <queue>using namespace std;#define MIN(a,b) ((a)<(b)?( 阅读全文
posted @ 2012-08-05 09:49 BeatLJ 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 模型:求n个城市的最短hamilton回路,n<=15。分析:看到n<=15这样的条件容易想到状态压缩DP。hamilton回路其实就是n个城市的一个圆排列,任选一个起点最后的结果都一样,我们不妨设结点0为起点,状态设计也就不难了。状态设计:d[s][last],表示从结点0出发,已经走过的结点构成状态s,最后走的结点为last;状态转移:d[s][last]=MIN(d[ns][k]+g[k][last]),ns为s中去掉last那一位,k为ns中是1的位(不能是起点0);边界:当s中只有2位是1的时候,说明从0结点出发,到达last,所以直接返回g[0][last]。结果:an 阅读全文
posted @ 2012-08-05 09:37 BeatLJ 阅读(273) 评论(0) 推荐(0) 编辑