描述

输入n个矩形,求他们总共占地面积(也就是求一下面积的并)
http://codevs.cn/problem/3044/


分析

先贴个Matrix67的讲离散化的博客地址: http://www.matrix67.com/blog/archives/108
其实上面的博客讲的讲的就很清楚了.

就相当于把矩形用许多小矩形来代替. 这些小矩形都是有一边或几条边延长后过其他矩形的顶点. 这么一说好像更复杂了. 换个说法, 就是把所有矩形的边都作为可无限延长的分割线, 将所有矩形分割成小矩形. 每个小矩形作为一个新的点, 然后在bool数组里记录哪个点被覆盖, 可以通过预处理或者临时计算出小矩形的面积. 最后扫一遍统计结果.


代码

49ms 256kB

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int maxn = 100 + 10; struct Matrix {double x1, y1, x2, y2;
} matrixs[maxn];double x[maxn<<1], y[maxn<<1];
bool covered[maxn<<1][maxn<<1];int main() {int n;while(scanf("%d", &n) == 1) {if(n == 0) break;for(int i = 0; i < n; i++) {double x1, y1, x2, y2;scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);matrixs[i] = (Matrix) {x1, y1, x2, y2};x[i<<1] = x1;y[i<<1] = y1;x[(i<<1) ^ 1] = x2;y[(i<<1) ^ 1] = y2;}sort(x, x + 2*n);sort(y, y + 2*n);// 以左下点的坐标作为格子的编号.memset(covered, 0, sizeof(covered));for(int cur = 0; cur < n; cur++) {int s_x, s_y, t_x, t_y;Matrix& M = matrixs[cur];for(s_x = 0; x[s_x] < M.x1; s_x++);for(s_y = 0; y[s_y] < M.y1; s_y++);for(t_x = s_x; x[t_x] < M.x2; t_x++);for(t_y = s_y; y[t_y] < M.y2; t_y++);// coverfor(int i = s_x; i < t_x; i++)for(int j = s_y; j < t_y; j++)covered[i][j] = 1;}double ans = 0.00;for(int i = 0; i < 2*n - 1; i++)for(int j = 0; j < 2*n - 1; j++)if(covered[i][j]) ans += (x[i + 1]-x[i]) * (y[j + 1]-y[j]);printf("%.2lf\n", ans);}return 0;
}

主页

http://blog.csdn.net/qq_21110267

[CODEVS 3044] 矩形面积求并相关推荐

  1. [codevs3044][POJ1151]矩形面积求并

    [codevs3044][POJ1151]矩形面积求并 试题描述 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行一个数n ...

  2. POJ 1151 Atlantis 矩形面积求交/线段树扫描线

    Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...

  3. 【codevs3044】矩形面积求并【POJ1151】Atlantis,第一次的扫描线

    传送门1 传送门2 思路: 第一次写扫描线 感觉还是很资瓷的 仅此作为第一次系列的又一个新成员 代码: #include<cstdio> #include<iostream> ...

  4. 多个矩形,求覆盖面积,周长,及交点

    问题:给出若干个矩形,(给的是矩形左上角和右下角坐标),求最后所得图形的面积/周长: 三个矩形如左图所示,而若要计算面积,看右图,用3个矩形各自的面积之和减去重复部分(红色和蓝色)的面积 人算很简单, ...

  5. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

  6. C语言:编写一个程序,从键盘读入一个矩形的两个边的值(整数),求矩形面积

    /* 编写一个程序,从键盘读入一个矩形 的两个边的值(整数),求矩形面积. */ #include<stdio.h> void main() {int length,wide,area;p ...

  7. c语言直方图最大矩形面积,利用枚举法求直方图中最大矩形面积的方法实例

    求直方图中的最大矩形面积: 例如给定直方图{2,3,1,2,4,2} 则直方图中最大矩形面积为x=(3,6),|x|=3,y=2,max面积=6 思考:利用枚举法 /*当前位置往前进行枚举法*/ pu ...

  8. 已知矩形面积,求最小周长

    1283 最小周长 1.0 秒 131,072.0 KB 20 分 初学者3级题 一个矩形的面积为S,已知该矩形的边长都是整数,求所有满足条件的矩形中,周长的最小值.例如:S = 24,那么有{1 2 ...

  9. 采用面向对象思想求矩形面积

    ** 采用面向对象思想求矩形面积 ** Rctangle.java 代码: void rectangle(float length,float width) { System.out.println( ...

最新文章

  1. Buttomsheetdialog的简单实用
  2. 模板 — 高精度计算
  3. Revit二次开发之“使用ElementTransformUtils.MoveElement()移动元素”
  4. confluence安装_Hive安装
  5. BS结构中,web如何将数据进行DES加密并写道IC卡中
  6. Storm实践2-【storm实时排序TopN】 - TOP10
  7. python卸载错误_卸载python后导致yum无法使用的解决办法 - Python - 服务器之家
  8. android word文档预览(支持doc/docx两种格式)
  9. 思维导图怎么画简单又漂亮?思维导图制作方法分享
  10. 大话2正在连接登录服务器,大话西游手游服务器连接失败进不去解决办法
  11. Android课程表显示
  12. Exception:org.eclipse.m2e.wtp.MarkedException: Unable to configure OHBC
  13. windows7浏览器无法打开html,win7网页无法打开出现HTML Parsing Error的解法
  14. Codeforces Round #694 (Div. 2) F. Strange Housing (贪心思维)
  15. 【原创】【SPI】SPI通信协议介绍
  16. WebPagetest H5性能测试工具入门详解
  17. 前端知识总结之基础知识
  18. Oracle甲骨文(北京中关村)授权学习中心 简介
  19. 揭秘《超能陆战队》诞生记
  20. Linux学习笔记(22.1)——基于SPI + Regmap + IIO的ICM20608设备驱动

热门文章

  1. [云炬创业基础笔记]第十一章创业计划书测试14
  2. 云炬创业政策学习笔记20210106
  3. 科大星云诗社动态20210519
  4. Java并行有优势吗_Java中不同的并发实现的性能比较
  5. c4d流体插件_【C4D】流体插件详细讲解
  6. 计算广告 pdf_小学生PDF格式的试卷怎么编辑修改
  7. CSS设置图片与文字水平居中对齐
  8. jquery flexigrid 增加行双击事件
  9. 【CyberSecurityLearning 8】PKI技术与应用
  10. 动态规划最大子段和问题