【集训Day3 离散化】矩形覆盖
矩形覆盖(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 离散化】矩形覆盖的更多相关文章
- hdu 5091 给定矩形覆盖尽量多点 扫描线+线段树
http://acm.hdu.edu.cn/showproblem.php?pid=5091 给你10000以内的敌舰的坐标(即分别为x,y),要求用W*H的矩形去围住一个区域,使得这个区域内的敌舰最 ...
- 2019暑期金华集训 Day3 图论
自闭集训 Day3 图论 NOI2019 D2T1 没有真正建出图来的必要,可以直接打取\(\min\)的\(tag\). 也可以把边压进堆里,然后变成一个二维清点问题(???),然后就线段树+并查集 ...
- 【OpenJudge 1793】矩形覆盖
http://noi.openjudge.cn/ch0405/1793/ 好虐的一道题啊. 看数据范围,一眼状压,然后调了好长时间QwQ 很容易想到覆盖的点数作为状态,我用状态i表示至少覆盖状态i表示 ...
- NOIP2002矩形覆盖[几何DFS]
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- bzoj 1185 旋转卡壳 最小矩形覆盖
题目大意 就是求一个最小矩形覆盖,逆时针输出其上面的点 这里可以看出,那个最小的矩形覆盖必然有一条边经过其中凸包上的两个点,另外三条边必然至少经过其中一个点,而这样的每一个点逆时针走一遍都满足单调性 ...
- [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖
跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...
- NOIP2002 矩形覆盖
题四 矩形覆盖(存盘名NOIPG4) [问题描述]: 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2), ...
- UVA-11983-Weird Advertisement(线段树+扫描线)[求矩形覆盖K次以上的面积]
题意: 求矩形覆盖K次以上的面积 分析: k很小,可以开K颗线段树,用sum[rt][i]来保存覆盖i次的区间和,K次以上全算K次 // File Name: 11983.cpp // Author: ...
- 【旋转卡壳+凸包】BZOJ1185:[HNOI2007]最小矩形覆盖
1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 1945 Solve ...
随机推荐
- 解决错误 系统找不到指定的批标签 make_command_arguments |hadoop windows出错
问题:cmd命令行传参数出错 此文章 适用于 cmd命令行传参数出错 在windows 7下倒腾 Hadoop 时出现 The system cannot find the batch label s ...
- 继承+派生+分类+钻石继承(day20)
目录 昨日内容 面对对象编程 类 定义类时发生的事情 调用类时发生的事情 init 对象 对象查找类的属性的顺序 对象的绑定方法 python中万物皆对象 今日内容 继承 什么是继承 为什么要继承 如 ...
- 三、进程和线程、协程在python中的使用
三.进程和线程.协程在python中的使用 1.多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上,当然生产者消费者这种也可以使用.多进程的优势就是一个子 ...
- Flask解析(一):Local、LocalStak、LocalProxy
原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/local_local_proxy_local_stack.html Local是什么? ...
- 设计模式C++描述----09.桥接(Bridge)模式
一. 举例 N年前: 计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP ...
- tcp通信客户端本地日志查看
最近有一个需求,app要接sdk,只涉及到客户端tcp通信,不涉及服务端接口调用.本文主要从adb环境准备.android/ios本地日志查看实战,进行分析整理. 一.adb查看Android本地日志 ...
- 找不到 cucumber.api.cli.Main 的报错解决方案
最近玩IDEA,发现导入的项目有问题,报了一个“找不到或者不存在cucumber.api.cli.Main”的错误. 后来发现是新版的IDEA在导入时没有提示,以至于我没有配置项目对应的Tomcat服 ...
- numpy.array 中的运算
简单运算 现在有有个需求,给定一个数组,让数组中每一个数乘以2,怎么做呢 n = 10 L = [i for i in range(n)] L # [0, 1, 2, 3, 4, 5, 6, 7, 8 ...
- UVa 455 - Periodic Strings解题报告
UVa OJ 455 Periodic Strings A character string is said to have period k if it can be formed by conca ...
- 易初大数据——2019年10月17日 王庆超 spss
开放数据库链接是为解决异构数据库间的数据共享而产生, 现已成为WOSA的主要部分和基于windows环境的一种数据库访问接口和标准ODOC为异构数据库访问提供统一接口,允许应用程序以SOL.为数据存取 ...