poj 1151 && hdu 1542 离散化求矩形面积的并
来源:互联网 发布:淘宝客导购app开发 编辑:程序博客网 时间:2024/05/16 14:53
这个题目的大致思路是这样的:输入n个矩形。用两个数组,分别记录没个矩形的x,y坐标。最后对x,y坐标进行排序。排序好之后,找第k个矩形的两个x坐标和y坐标。用一个标志数组来标记这一块区域。最好离散化后的小的矩形,跟标记的区域进行相乘,得到这块区域的值。如果是求面积,区域就可以用1来标记。如果是求区域的最大值,要进行比较,得到区域的最值,进行标记。
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;#define N 204struct Line{ double x1,y1; double x2,y2;}line[N];double x[N],y[N];int xy[N][N];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;}
- poj 1151 && hdu 1542 离散化求矩形面积的并
- POJ 1151 && 1389 离散化求矩形面积的并
- HDU-1542/POJ-1151 Atlantis(矩形并面积--线段树+离散化)
- hdu 1542 求矩形并的面积
- 离散化矩形面积求并
- 【坐标离散化】矩形面积求并
- hdu1542/poj 1151 (线段树&离散化&求矩形面积并)
- POJ1151 离散化求矩形面积的并
- HDU 1542 Atlantis(扫描线求矩形面积并+离散化)
- hdu 1542 Atlantis 线段树矩形面积并+离散化
- poj 1151 poj 1389 线段树+扫描线+离散化 [矩形的面积并]
- HDU 1542【线段树--矩形面积的并,扫描线+离散化】
- hdu1255 覆盖的面积(线段树+扫描线+离散化,求矩形面积并)
- poj 1151 && hdu 1542 求矩形面积并(线段树)
- poj 1151 hdu 1542 hoj1119 Atlantis 线段树扫描线求矩形面积并
- POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
- poj 1151 线段树求矩形面积的并
- 线段树求矩形面积并 扫描线+离散化
- C++笔试题 String类的实现 三大复制控制函数
- 创业还是打工
- 创业公司如何分配股份与期权?
- android ramdisk
- 设计模式之(十三)备忘机制Memento
- poj 1151 && hdu 1542 离散化求矩形面积的并
- 多种系统exe打开方式还原的详细方法
- linux下带有CDT的Eclipse的helloworld编译错误的解决方法
- 一个很好的对8086cpu的Assembly的编写和调试教程&&Flags Register
- SQL SERVER问题解决:已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: 命名管道提供程序, error: 0 - 管道的另一端上无任何进程。)
- VS2010窗口的最大化
- oracle 连表查询时的数据类型问题
- 动态规划入门(三)DP 基本思想 具体实现 经典题目 POJ1159 POJ1458 POJ1141
- vim操作技巧