矩形覆盖(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;
}

【集训Day3 离散化】矩形覆盖的更多相关文章

  1. hdu 5091 给定矩形覆盖尽量多点 扫描线+线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=5091 给你10000以内的敌舰的坐标(即分别为x,y),要求用W*H的矩形去围住一个区域,使得这个区域内的敌舰最 ...

  2. 2019暑期金华集训 Day3 图论

    自闭集训 Day3 图论 NOI2019 D2T1 没有真正建出图来的必要,可以直接打取\(\min\)的\(tag\). 也可以把边压进堆里,然后变成一个二维清点问题(???),然后就线段树+并查集 ...

  3. 【OpenJudge 1793】矩形覆盖

    http://noi.openjudge.cn/ch0405/1793/ 好虐的一道题啊. 看数据范围,一眼状压,然后调了好长时间QwQ 很容易想到覆盖的点数作为状态,我用状态i表示至少覆盖状态i表示 ...

  4. NOIP2002矩形覆盖[几何DFS]

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  5. bzoj 1185 旋转卡壳 最小矩形覆盖

    题目大意 就是求一个最小矩形覆盖,逆时针输出其上面的点 这里可以看出,那个最小的矩形覆盖必然有一条边经过其中凸包上的两个点,另外三条边必然至少经过其中一个点,而这样的每一个点逆时针走一遍都满足单调性 ...

  6. [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖

    跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...

  7. NOIP2002 矩形覆盖

    题四 矩形覆盖(存盘名NOIPG4) [问题描述]: 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2), ...

  8. UVA-11983-Weird Advertisement(线段树+扫描线)[求矩形覆盖K次以上的面积]

    题意: 求矩形覆盖K次以上的面积 分析: k很小,可以开K颗线段树,用sum[rt][i]来保存覆盖i次的区间和,K次以上全算K次 // File Name: 11983.cpp // Author: ...

  9. 【旋转卡壳+凸包】BZOJ1185:[HNOI2007]最小矩形覆盖

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1945  Solve ...

随机推荐

  1. Tomcat原理与优化随笔

    1. 基础组件: Server, Service: Connector(http, https, ajp用于Apache反向代理), Engine Engine: Realm用于安全配置等,如User ...

  2. 宋宝华:Docker 最初的2小时(Docker从入门到入门)

    本文系转载,著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 最初的2小时,你会爱上Docker, ...

  3. F#周报2019年第44期

    新闻 Elmish.WPF教程 介绍Orleans 3.0 GC配置历史 介绍ONNX运行时1.0 介绍微软Q&A(预览) 使用App中心持续布署与监控你的UWP,WPF与Windows Fo ...

  4. spring cloud 2.x版本 Feign服务发现教程(内含集成Hystrix熔断机制)

    前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...

  5. java和python对比

    一:解释性和编译型 梳理 编译型:源代码经过编译直接变为二进制的机器语言,每次都可以直接重新运行不需要翻译.典型的就是c语言. 解释性:java和python都是解释型,源代码经过编译变为字节码文件, ...

  6. 20190723_C中的调用可变函数

    今天联系了 C 中调用可变参函数 参考网站:https://www.runoob.com/cprogramming/c-standard-library-stdarg-h.html 代码1: 向被调用 ...

  7. 说说 Python3 中的数字处理

    最近在处理订单相关的问题,踩了数字的一些坑,在此记录下. 其中有问题的代码涉及金额比较,便于描述,假设了下面一段代码 def is_paid(pay_price, paid_price): retur ...

  8. Jenkins 结合 ANT 发送测试报告

    全局变量配置 点击 ManageJenkins进入Jenkins 管理 点击 Global Tool Configuration 进入全局变量配置 配置 Ant ,Name 自己定义一个比较好理解的名 ...

  9. [UWP] 为WinRT组件创建Nuget包

    Nuget 是 dotnet 开发中必不可少的包管理工具,但不仅仅局限于 dotnet 项目,在 VS 中使用 C++ 开发的时候,也可以使用 Nuget 来引用第三方组件.同样也可以用 Nuget ...

  10. 【PyTorch教程】P3. Python学习中的两大法宝函数(当然也可以用在PyTorch)

    温馨提示:为了更好的教程体验,提供视频.阅读地址 Youtube: https://www.youtube.com/playlist?list=PLgAyVnrNJ96CqYdjZ8v9YjQvCBc ...