[Codevs] 3044 矩形面积求并(离散化)
2017-04-14 20:18
260 查看
这道题据说是NOIP哪年哪道题???
被各大省讲烂了???
--------------------------------------------
首先大致思路如上所示:以一个点代表其右上的一个单位。这个单位矩形的某种不可名状性质如右上所示。这样,数组xy[c][c]就代表了c+1到c这个小矩形是否被覆盖了,然后我们在涂点的时候就涂少一个单位,这样小矩形合起来刚好就能代表整个大矩形,然后我们用这个方法求出所有覆盖面积(就是一群矩形);
但是呢这道题的重点其实是在 离 散 化
离散化的代码相信很容易就能从下列代码中被识别出来,具体方式就是利用映射数组,将 元素 映射为下标。
其实后来发现这道题很容易= =可能是我搞的时间略长,,
题目:http://codevs.cn/problem/3044/
被各大省讲烂了???
--------------------------------------------
首先大致思路如上所示:以一个点代表其右上的一个单位。这个单位矩形的某种不可名状性质如右上所示。这样,数组xy[c][c]就代表了c+1到c这个小矩形是否被覆盖了,然后我们在涂点的时候就涂少一个单位,这样小矩形合起来刚好就能代表整个大矩形,然后我们用这个方法求出所有覆盖面积(就是一群矩形);
但是呢这道题的重点其实是在 离 散 化
离散化的代码相信很容易就能从下列代码中被识别出来,具体方式就是利用映射数组,将 元素 映射为下标。
其实后来发现这道题很容易= =可能是我搞的时间略长,,
题目:http://codevs.cn/problem/3044/
#include<cstdio> // By: Chorolop #include<iostream> #include<cstring> #include<algorithm> using namespace std; double x[300],y[300],xy[300][300],ans; double s[300][4]; int n,k = 1; void _init() { memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); memset(xy,0,sizeof(xy)); memset(s,0,sizeof(s)); ans = 0; k = 1; } int main() { scanf("%d",&n); while(n) { _init(); for(int i = 1;i <= n;i++) { scanf("%lf %lf %lf %lf",&s[i][0],&s[i][1],&s[i][2],&s[i][3]); x[k] = s[i][0]; y[k] = s[i][1]; k++; x[k] = s[i][2]; y[k] = s[i][3]; k++; } sort(x+1,x+k); sort(y+1,y+k); for(int i = 1;i <= n;i++) { int ix,iy,jx,jy; for(ix = 0;x[ix] < s[i][0];ix++); for(iy = 0;y[iy] < s[i][1];iy++); for(jx = 0;x[jx] < s[i][2];jx++); for(jy = 0;y[jy] < s[i][3];jy++); for(int px = ix;px < jx;px++) for(int py = iy;py < jy;py++) xy[px][py] = 1; } for(int px = 0;px <= k;px++) for(int py = 0;py <= k;py++) ans += xy[px][py] * (x[px+1]-x[px]) * (y[py+1]-y[py]); printf("%.2lf\n",ans); scanf("%d",&n); } return 0; }
相关文章推荐
- codevs 3044 线段树+离散化+扫描线 (矩形面积并
- 【离散化练习】Codevs3044矩形面积求并
- codevs3044 矩形面积求并(线段数+扫描线+离散化)
- 矩形面积求并(codevs 3044)
- 【codevs3044】矩形面积求并&&【POJ1151】Atlantis,第一次的扫描线
- codevs 3044 矩形面积求并 (扫描线)
- 【codevs3044】矩形面积求并
- [codevs3044]矩形面积求并(线段树+扫描线)
- codevs3044 矩形面积求并
- Codevs P3044矩形面积求并
- (codevs 3044 矩形面积求并)<可以不用线段树>
- codevs 3044 矩形面积求并
- 【POJ1177】【HDU1828】【codevs2149】矩形面积周长并
- Codevs 题目3044 矩形面积求并(线段树+扫描线+离散化)
- 【codevs 3044】 矩形面积求并 【线段树 扫描线 离散化】
- HDU 1542【线段树--矩形面积的并,扫描线+离散化】
- codevs1249 多边形面积 解题报告
- 线段树求矩形面积并 扫描线+离散化
- [CODEVS 3044] 矩形面积求并
- poj 1151 线段树+离散化+扫描线 矩形面积并 (矩阵操作类)