博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
离散化的应用:矩形覆盖问题
阅读量:5219 次
发布时间:2019-06-14

本文共 999 字,大约阅读时间需要 3 分钟。

给出一列矩形,求被矩形覆盖的面积总共有多少?

显然,最简单的办法就是模拟.设置一个布尔型二维数组,将有矩形覆盖的方格填上1,最后统计一遍即可.

但是复杂度相当可惜,和坐标系面积和举行个数以及矩形平均面积成正比.也就是说,如果坐标系范围在[-10000000,10000000]之间,就肯定过不了了.不仅过不了,而且存不下.10000x10000都困难.

有什么办法可以解决呢?注意n的值不大,所以有很多坐标数字都是不必须的,那么让我们"压缩"坐标系,将所有出现过的坐标都记录到一个hash数组中,那么就可以达到离散化的作用了.

附:color代码

#include #include struct rect{	int x1,x2,y1,y2,size,id;} rects[100];inline bool cmp(rect a,rect b){	return (a.size>b.size?true:(a.size==b.size?(a.id
x1+=15000; (rects+i)->x2+=15000; (rects+i)->y1+=15000; (rects+i)->y2+=15000; xs[(rects+i)->x1]=1; xs[(rects+i)->x2]=1; ys[(rects+i)->y1]=1; ys[(rects+i)->y2]=1; } xs[0]=ys[0]=1; xs[30000]=ys[30000]=1; j=0; for(i=0;i<=30000;++i) if(xs[i]) xp[(xs[i]=j++)]=i; xa=j; j=0; for(i=0;i<=30000;++i) if(ys[i]) yp[(ys[i]=j++)]=i; ya=j; for(i=0;i
x1=xs[(rects+i)->x1]; (rects+i)->x2=xs[(rects+i)->x2]; (rects+i)->y1=ys[(rects+i)->y1]; (rects+i)->y2=ys[(rects+i)->y2]; for(xx=rects[i].x1;xx

  

 

转载于:https://www.cnblogs.com/tmzbot/p/3985814.html

你可能感兴趣的文章
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
CoreData 从入门到精通(四)并发操作
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>
Java编程思想总结笔记Chapter 5
查看>>
[LeetCode]662. Maximum Width of Binary Tree判断树的宽度
查看>>
WinForm聊天室
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>
selenium学习中遇到的问题
查看>>
大数据学习之一——了解简单概念
查看>>
Linux升级内核教程(CentOS7)
查看>>
Lintcode: Partition Array
查看>>
分享适合个人站长的5类型网站
查看>>
类别的三个作用
查看>>
【SICP练习】85 练习2.57
查看>>