poj 1151 && hdu 1542 离散化求矩形面积的并
2011-08-08 10:42
483 查看
这个题目的大致思路是这样的:输入n个矩形。用两个数组,分别记录没个矩形的x,y坐标。最后对x,y坐标进行排序。排序好之后,找第k个矩形的两个x坐标和y坐标。用一个标志数组来标记这一块区域。最好离散化后的小的矩形,跟标记的区域进行相乘,得到这块区域的值。如果是求面积,区域就可以用1来标记。如果是求区域的最大值,要进行比较,得到区域的最值,进行标记。
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define N 204 struct Line { double x1,y1; double x2,y2; }line ; double x ,y ; int xy ; int n; int serch(double *arr,double key) { int low,high,mid; low=0,high=2*n-1; while(low<=high) { mid=(low+high)/2; if(arr[mid]==key)return mid; if(key>arr[mid])low=mid+1; else high=mid-1; } return 0; } int main() { int cn=0; while(scanf("%d",&n)&&n) { for(int i=0,j=0;i<n;i++) { scanf("%lf%lf%lf%lf",&line[i].x1,&line[i].y1,&line[i].x2,&line[i].y2); x[j]=line[i].x1; y[j]=line[i].y1; j++; x[j]=line[i].x2; y[j]=line[i].y2; j++; } sort(x,x+2*n); sort(y,y+2*n); memset(xy,0,sizeof(xy)); for(int i=0;i<n;i++) { int f1=serch(x,line[i].x1); int f2=serch(x,line[i].x2); int f3=serch(y,line[i].y1); int f4=serch(y,line[i].y2); for(int j=f1;j<f2;j++) { for(int k=f3;k<f4;k++) { xy[j][k]=1; } } } double area=0; for(int i=0;i<2*n;i++) { for(int j=0;j<2*n;j++) { area+=(x[i+1]-x[i])*(y[j+1]-y[j])*(double)xy[i][j]; } } printf("Test case #%d\n",++cn); printf("Total explored area: %.2lf\n\n",area); } return 0; }
相关文章推荐
- 线段树求矩形面积并 方法详解 (扫描线)HDU 1542 & HDU 3265 & POJ 1151
- 【codevs 3044 矩形面积合并】【poj 1151 Atlantis】【hdu 1542 Atlantis】题意&题解&代码(c++)
- HDU-1542/POJ-1151 Atlantis(矩形并面积--线段树+离散化)
- hdu 1542 & poj 1151 Atlantis 线段树扫描线求矩形面积并
- poj 1151 && hdu 1542 求矩形面积并(线段树)
- hdu 1542&&poj 1151 Atlantis[线段树+扫描线求矩形面积的并]
- POJ 1151 && 1389 离散化求矩形面积的并
- poj 1151 Atlantis / hdu 1542 线段树扫描线 矩形面积并
- HDU 1542 [POJ 1151] Atlantis (矩形面积并)
- POJ 1151 & HDU 1542 Atlantis(扫描线模板 线段树 离散化)
- 【codevs 3044】【HDU 1542】【poj 1151】矩形面积并 线段树+‘扫描线’
- POJ 1151 & HDU 1542 Atlantis (矩形切割)
- hdu 1542 & & poj 1151
- poj 1151 && hdu 1542
- poj 1151 Atlantis(矩形面积并,线段树+离散化)
- hdu 1542 &&poj 1151
- poj 1151 线段树+离散化+扫描线 矩形面积并 (矩阵操作类)
- hdoj 1542 && poj 1151 Atlantis && poj 1389 Area of Simple Polygons 【线段树 + 离散化 + 扫描线】
- hdu1542/poj 1151 (线段树&离散化&求矩形面积并)
- POJ1151 (HDU 1542) Atlantis【矩形面积并,线段树+离散化+扫描线模板】