博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法复习之坐标离散化
阅读量:6305 次
发布时间:2019-06-22

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

 

例子:

1.

描述: 在桌子上放了N个平行于坐标轴的矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积。

输入格式:输入第一行为一个数N(1<=N<=100),表示矩形的数量,下面N行,每行四个整数,分别表示每个矩形的左下角

和右上角的坐标,坐标范围为-10^8到10^8之间的整数。

输出格式:

输出只有一行,一个整数,表示图形面积。

样例输入:

3

1 1 4 3

2 -1 3 2

4 0 5 2

样例输出:

10

#include
#include
using namespace std;const int maxn=210;int x1[maxn],y1[maxn],x2[maxn],y2[maxn],x[maxn],y[maxn];void init() { for(int i=0; i
>n) { init(); for(int i=1; i<=n; i++) { cin>>x1[i]>>y1[i]>>x2[i]>>y2[i]; x[2*i-1]=x1[i]; x[2*i]=x2[i]; y[2*i-1]=y1[i]; y[2*i]=y2[i]; } sort(x+1,x+2*n+1); sort(y+1,y+2*n+1); int sum=0; //枚举每一个单位,,判断是否符合条件 for(int i=1; i<=2*n-1; i++) for(int j=1; j<=2*n-1; j++) { int s=((x[i+1]-x[i])*(y[i+1]-y[i])); for(int k=1; k<=n; k++) { if(x[i]>=x1[k]&&y[i]>=y1[k]&&x[i+1]<=x2[k]&&y[i+1]<=y2[k]) { sum+=s; break; } } } cout<
<

2.来自《挑战程序设计竞赛》

区域的个数

w*h的各自上画了n条垂直或水平的宽度为1的直线,求出这些线将格子划分成了多少个区域。

限制条件:1<=w,h<=1000000       1<=n<=500

利用数组存储搜索即可,问题在于数的范围太大,所以要利用坐标离散化,数组中只需存储有直线的行列,及其前后的行列就够了。

//离散化函数,对坐标x1,x2进行离散化,并返回离散化之后的宽度//其中x1,x2代表一条直线开头与结尾的列 y为行 //重新形成一个数组#include
#include
#include
#include
int Compress(int *x1,int *x2,int w) { vector
s;//只需存前后及自身坐标 for(int i=0; i

 

转载于:https://www.cnblogs.com/wtblogwt/p/9750312.html

你可能感兴趣的文章
linux下的权限问题
查看>>
教你如何使用Flutter和原生App混合开发
查看>>
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>
JDBC(三)数据库连接和数据增删改查
查看>>
淘宝应对"双11"的技术架构分析
查看>>
ssh
查看>>
订单的子单表格设置颜色
查看>>
Office365 Exchange Hybrid 番外篇 ADFS后端SQL群集(一)
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
C++策略模式
查看>>
我的友情链接
查看>>
oracle表分区详解
查看>>
网络编程中常见结构体
查看>>
SSL/TLS原理详解
查看>>
Docker 自定义SSH服务镜像
查看>>
JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改
查看>>
configure: error: in `/root/httpd-2.2.11/srclib/apr': c
查看>>
CentOS7搭建Kubernetes-dashboard管理服务
查看>>