线段树辅助——扫描线法计算矩形面积并

本篇文章转自:传送门

分析:

1.矩形比较多,坐标也很大,所以横坐标需要离散化(纵坐标不需要),熟悉离散化后这个步骤不难,所以这里不详细讲解了,不明白的还请百度

2.重点:扫描线法:假想有一条扫描线,从左往右(从右往左),或者从下往上(从上往下)扫描过整个多边形(或者说畸形。。多个矩形叠加后的那个图形)。如果是竖直方向上扫描,则是离散化横坐标,如果是水平方向上扫描,则是离散化纵坐标。下面的分析都是离散化横坐标的,并且从下往上扫描的

扫描之前还需要做一个工作,就是保存好所有矩形的上下边,并且按照它们所处的高度进行排序,另外如果是上边我们给他一个值-1,下边给他一个值1,我们用一个结构体来保存所有的上下边

struct segment
{
double l,r,h;   //l,r表示这条上下边的左右坐标,h是这条边所处的高度
int f;   //所赋的值,1或-1
}

接着扫描线从下往上扫描,每遇到一条上下边就停下来,将这条线段投影到总区间上(总区间就是整个多边形横跨的长度),这个投影对应的其实是个插入和删除线段操作。还记得给他们赋的值1或-1吗,下边是1,扫描到下边的话相当于往总区间插入一条线段,上边-1,扫描到上边相当于在总区间删除一条线段(如果说插入删除比较抽象,那么就直白说,扫描到下边,投影到总区间,对应的那一段的值都要增1,扫描到上边对应的那一段的值都要减1,如果总区间某一段的值为0,说明其实没有线段覆盖到它,为正数则有,那会不会为负数呢?是不可能的,可以自己思考一下)。

每扫描到一条上下边后并投影到总区间后,就判断总区间现在被覆盖的总长度,然后用下一条边的高度减去当前这条边的高度,乘上总区间被覆盖的长度,就能得到一块面积,并依此做下去,就能得到最后的面积

(这个过程其实一点都不难,只是看文字较难体会,建议纸上画图,一画即可明白,下面献上一图希望有帮组)

线段树辅助——扫描线法计算矩形面积并相关推荐

  1. HDU 1828 线段树之扫描线之周长并

    点击打开链接 题意:给n个矩形,求它们重叠后的周长 思路:用线段树的扫描线从下到上扫一遍,与面积并思想有些相似面积并,下面重边的处理相似,但是周长的并需要求的是竖边的个数然后乘以高度,而面积并求的是底 ...

  2. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)

    [POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  3. 编写矩形类 计算矩形面积

    编写矩形类 计算矩形面积 public class juxing {int a;int b; juxing(int a,int b){System.out.println("矩形面积s=&q ...

  4. 【Python】第1次作业:圆面积的计算A,计算矩形面积,说句心里话A

    [Python]第1次作业:圆面积的计算A,计算矩形面积,说句心里话A 1.圆面积的计算A 题目:根据圆半径计算圆面积,结果保留两位小数.其中,圆周率使用 3.1415. raduis=float(i ...

  5. python计算矩形面积_python实现用类读取文件数据并计算矩形面积

    1.创建一个类Rectangle,已知a.b求面积,求三角形的面积 2.结合题目一,从题目一文件中读取数据,并采用类的方法,将计算的结果写在另一个文档中. (1)利用类进行计算一个矩形的面积,已经a. ...

  6. 【Java】计算矩形面积

    题目 一个矩形可以由两个相邻边的长度确定.编写一个类,使之拥有两个表示边长的整数数据,并提供一个有用的矩形计算方法,如计算面积,更新矩形边的长 度,计算两个矩形的组合面积等.提示:需要写出具有下列形式 ...

  7. 设计一个矩形类,完成计算矩形面积和显示矩形属性的功能。

    / /* [基本题]设计一个矩形类,完成计算矩形面积和显示矩形属性的功能. */ #include<iostream> using namespace std; class Retangl ...

  8. POJ1151 Atlantis(线段树,扫描线,离散化,矩形面积并)

    题目: Atlantis Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23220 Accepted: 8657 Descrip ...

  9. 蓝桥杯 油漆面积【第八届】【省赛】【A组】线段树扫面线/求矩形相交面积/模拟

    资源限制 内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s X星球的一批考古机器人正在一片废墟上考古. 该区域的地面坚硬如 ...

最新文章

  1. vue - package.json
  2. apue学习笔记(第三章 文件I/O)
  3. 2011年度最佳 jQuery 插件发布
  4. matplotlib.pyplot---------Python强大的绘图功能软件
  5. hibernate级联操作详解
  6. python进程join的用法_python 进程介绍 进程简单使用 join 验证空间隔离
  7. duilib清空richedit内容
  8. 又是一种用于JavaScript的前端国际化方案
  9. java web试题_Java web开发经典面试题汇总(内附答案详解)
  10. 何时及为何使用代表? [重复]
  11. C#中Lambda表达式总结
  12. 找不到服务器 ip 地址,无法访问此网络 找不到服务器IP地址
  13. python手机端抢票大麦网_大麦网抢票攻略1.0
  14. 蓝桥杯最后一天复习?各大算法四步法教你轻松秒杀各种题型
  15. 六大接口管理平台,总有一款适合你的!
  16. C++ 不知算法系列之聊聊希尔、归并排序算法中的分治哲学
  17. Symbol - 看似平凡的Symbol其实我们每天都在用 - 字符串操作
  18. jquery图片放大镜插件—jqzoom
  19. 利用π/4=1-1/3+1/5-1/7+1/9+……,编程计算π近似值,直到最后一项的绝对值小于10的负5次方为止,输出π的值并统计累加的项数。
  20. PaddleDetection复现笔记

热门文章

  1. ACM到底该不该坚持??
  2. 美国大学计算机系学什么,最新美国大学计算机专业排名介绍
  3. 波士顿大学研究生计算机科学专业排名,USnews2012美国大学排名计算机科学专业研究生排名...
  4. 机器人工程专业简介与开设高校名单详细完整版(2019年4月更新-专业代码:080803T)
  5. 【TS】泛型 Generics
  6. iOS APP转让条件
  7. Python量化:评估投资组合的收益率和风险
  8. oracle 在此 select 语句中缺少 into 子句,Go database/sql文档
  9. 南充中等计算机专业学校排名,南充计算机/电脑学校哪里好|南充外国语中等专业学校计算机应用|顺庆计算机学校怎么样|南充中专学校...
  10. 【开源】发布一个软件“WeNote 微便签”,比系统自带的便笺好用,每个便签可独立设倒计时