【集训Day3 离散化】矩形覆盖
来源:互联网 发布:数据有效性输入信息 编辑:程序博客网 时间:2024/06/03 13:42
矩形覆盖(planting)
【问题描述】
给定在一个平面坐标系上的N(1 <= N <= 100)个矩形区域,这N个矩形可能有相互覆盖的部分。求平面上被所有矩形覆盖的总面积,重复部分只算一次。
【输入格式】planting.in
第一行一个整数N。
接下来N行,每行包含4个整数x1 y1 x2 y2,表示一个矩形区域。矩形的左上角为(x1,y1),右下角为(x2,y2)。坐标范围为–10^8到10^8之间的整数。
【输出格式】planting.out
输出被矩形覆盖的总面积。
【输入样例】
2
0 5 4 1
2 4 6 2
【输出样例】
20
【解题思路】
将输入的行和列用两个数组映射到1···n中去,将其离散化,利用另一个数组存下每一对离散的变量之间的差距
【解题反思】
- 解题时要注意细节
【参考程序】
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct data{ int num; int id;}x[205],y[205];bool comp(data a,data b){ return a.num<b.num;}int n,bx[205],by[205],c[205][205],ans,pic[205][205];int main(){ freopen("planting.in","r",stdin); freopen("planting.out","w",stdout); cin>>n; for (int i=1;i<=n;i++) { cin>>x[2*i-1].num>>y[2*i].num>>x[2*i].num>>y[2*i-1].num;//由于是平面直角坐标系,列轴是向上的。 x[2*i-1].id=2*i-1; y[2*i-1].id=2*i-1; x[2*i].id=2*i; y[2*i].id=2*i; } sort(x+1,x+1+2*n,comp); sort(y+1,y+1+2*n,comp); for (int i=1;i<=2*n;i++) { bx[x[i].id]=i; by[y[i].id]=i; }//离散化 for (int i=1;i<2*n;i++) for (int j=1;j<2*n;j++) c[i][j]=(x[i+1].num-x[i].num)*(y[j+1].num-y[j].num);//每一个离散的变量间的差距 for (int i=1;i<=n;i++) for (int j=bx[2*i-1];j<bx[2*i];j++) for (int k=by[2*i-1];k<by[2*i];k++) pic[j][k]=1;//传统的标记方法,简单暴力 for (int i=1;i<2*n;i++) for (int j=1;j<2*n;j++) if (pic[i][j]==1) ans+=c[i][j];//统计 cout<<ans; return 0;}
阅读全文
0 0
- 【集训Day3 离散化】矩形覆盖
- 矩形覆盖求并 二维离散化 扫描线算法
- 矩形离散化
- HDU1255 覆盖的面积(线段树,离散化,扫描线,矩形面积交)
- hdu1255 覆盖的面积(线段树+扫描线+离散化,求矩形面积并)
- Poj1151/HDU1542(求并矩形覆盖的面积)分别用离散化处理,矩形切割,线段树三种方法实现.
- 湖南集训Day3
- 20160124集训Day3-数学
- ACM集训day3
- zzuacm集训day3
- 省队集训DAY3
- 沈阳集训day3
- 暑期集训 DAY3
- 集训题解-Day3
- 郑州集训DAY3笔记
- 北京集训DAY3
- CDOJ 1335-求恰好k次覆盖矩形面积并- (线段树 扫描线 离散化)
- xor 2016 国庆集训day3
- Ajax+mybaits实现省市区三级联动
- 8月17日集训
- 返回分层的训练集和测试集,sklearn-learn 中的StratifiedShuffleSplit
- poj2406--Power Strings (KMP)
- JAVA集合体系
- 【集训Day3 离散化】矩形覆盖
- linux-基础-文件操作/C-库函数文件操作/时间操作
- 0817 T3 长
- log4j
- pyautogui
- jsp页面使用C标签,需要在页面引入c标签库
- Docker学习笔记:Docker 基础用法和命令帮助
- tmp目录文件占用内存分析
- python cart算法的简单实现