3044矩形面积求并
2015-05-03 16:27
344 查看
http://codevs.cn/problem/3044/
题目描述 Description
输入n个矩形,求他们总共占地面积(也就是求一下面积的并)
输入描述 Input Description
可能有多组数据,读到n=0为止(不超过15组)
每组数据第一行一个数n,表示矩形个数(n<=100)
接下来n行每行4个实数x1,y1,x2,y1(0 <= x1 < x2 <= 100000;0 <= y1 < y2 <= 100000),表示矩形的左下角坐标和右上角坐标
输出描述 Output Description
每组数据输出一行表示答案
样例输入 Sample Input
2
10 10 20 20
15 15 25 25.5
0
样例输出 Sample Output
180.00
数据范围及提示 Data Size & Hint
无
嗯。一般我们会想到有一种方法就是一个一个点的用bool数组填过去。这在数据很小的时候就可以过的但是在这道题中我们要离散化处理(数据变态)。离散的思路是把所有的点都先排个序。这样有些点就会构成一个个小矩形。然后我们需要判断它是不是在要求的矩形里,是,就把它加进来。
题目描述 Description
输入n个矩形,求他们总共占地面积(也就是求一下面积的并)
输入描述 Input Description
可能有多组数据,读到n=0为止(不超过15组)
每组数据第一行一个数n,表示矩形个数(n<=100)
接下来n行每行4个实数x1,y1,x2,y1(0 <= x1 < x2 <= 100000;0 <= y1 < y2 <= 100000),表示矩形的左下角坐标和右上角坐标
输出描述 Output Description
每组数据输出一行表示答案
样例输入 Sample Input
2
10 10 20 20
15 15 25 25.5
0
样例输出 Sample Output
180.00
数据范围及提示 Data Size & Hint
无
嗯。一般我们会想到有一种方法就是一个一个点的用bool数组填过去。这在数据很小的时候就可以过的但是在这道题中我们要离散化处理(数据变态)。离散的思路是把所有的点都先排个序。这样有些点就会构成一个个小矩形。然后我们需要判断它是不是在要求的矩形里,是,就把它加进来。
#include<cstdio> #include<algorithm> #include<set> #include<map> #include<ctime> #include<queue> #include<iostream> #include<cmath> #include<cstring> #include<cstdlib> using namespace std; int n; double x[210],y[210]; bool f[210][210]; double ans; struct node { double x1,y1,x2,y2; }G[110]; int main() { while(scanf("%d",&n) && n) { memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); memset(f,false,sizeof(f)); ans=0; for(int i=0;i<n;i++) { scanf("%lf%lf%lf%lf",&G[i].x1,&G[i].y1,&G[i].x2,&G[i].y2); x[i*2]=G[i].x1; x[i*2+1]=G[i].x2; y[i*2]=G[i].y1; y[i*2+1]=G[i].y2; } sort(x,x+2*n); sort(y,y+2*n); int a,b; for(int i=0;i<n;i++) { a=0; b=0; while(x[a]<=G[i].x1 && a<2*n)a++;//排除那些不在矩形里的点 while(y[b]<=G[i].y1 && b<2*n)b++; for(int j=a;x[j]<=G[i].x2 && j<2*n;j++) for(int k=b;y[k]<=G[i].y2 && k<2*n;k++) f[j][k]=true; } for(int i=0;i<2*n;i++) for(int j=0;j<2*n;j++) if(f[i][j]) ans+=(x[i]-x[i-1])*(y[j]-y[j-1]); printf("%.2f\n",ans); } return 0; }
相关文章推荐
- Codevs 题目3044 矩形面积求并(线段树+扫描线+离散化)
- [codevs3044]矩形面积求并(线段树+扫描线)
- 【codevs3044】矩形面积求并&&【POJ1151】Atlantis,第一次的扫描线
- 【codevs 3044】 矩形面积求并 【线段树 扫描线 离散化】
- 3044 矩形面积求并 - Wikioi
- Codevs P3044矩形面积求并
- 【codevs 3044 矩形面积合并】【poj 1151 Atlantis】【hdu 1542 Atlantis】题意&题解&代码(c++)
- (codevs 3044 矩形面积求并)<可以不用线段树>
- poj1151==codevs 3044 矩形面积求并
- [CODEVS 3044] 矩形面积求并
- 矩形面积求并(codevs 3044)
- 【codevs3044】矩形面积求并
- codevs 3044_矩形面积求并_离散
- [CODEVS 3044] 矩形面积求并
- codevs 3044 矩形面积求并
- codevs3044 矩形面积求并(线段数+扫描线+离散化)
- [Codevs] 3044 矩形面积求并(离散化)
- codevs3044 矩形面积求并
- CodeVS3044矩形面积求并
- codves 3044 矩形面积求并