Poj 1255 覆盖的面积

hdu(1255)——覆盖的面积(线段树求面积交) 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 虽说覆盖两次区域的面积,但是这道题实际上就是求矩形的面积交。 膜拜能够想出这种解法的神牛,竟然能把实际的东西用这么抽象的语言表示出来,实在是佩服,现在关于扫描线的题才做了几道,没有对其深刻理解,但是多练总可以理解的,奋斗吧!!ACMer!!我是永远不会服输的。加油! 下面还是附上题解,写的不够详细清楚还请多多见谅。 首先我想说 阅读详情

覆盖的面积

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3553    Accepted Submission(s): 1743


Problem Description
给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.


 

Input
输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1<=N&lt;=1000),代表矩形的数量,然后是N行数据,每一行包含四个浮点数,代表平面上的一个矩形的左上角坐标和右下角坐标,矩形的上下边和X轴平行,左右边和Y轴平行.坐标的范围从0到100000.

注意:本题的输入数据较多,推荐使用scanf读入数据.
 

Output
对于每组测试数据,请计算出被这些矩形覆盖过至少两次的区域的面积.结果保留两位小数.
 

Sample Input
2 5 1 1 4 2 1 3 3 7 2 1.5 5 4.5 3.5 1.25 7.5 4 6 3 10 7 3 0 0 1 1 1 0 2 1 2 0 3 1
 

Sample Output
7.63 0.00

#include<iostream>
#include<cstdio>
#include<algorithm> 
#define Max 10005
using namespace std;
struct line{
	double x, y1, y2;
	int flag;
}x_line[Max];

struct node{
	int l, r, flag;
	double x, f;
}tree[Max];

double point[Max];
int n, m, xm;

int cmp(double a,double b)
{
	return a<b;
}

bool comp(line a,line b)
{
    return a.x<b.x;
}

void Build(int l,int r,int k)
{
	int m;
	tree[k].l = l;
	tree[k].r = r;
	tree[k].flag = 0;
	tree[k].x = 0.0;
	tree[k].f = 0.0;
	if(l+1 == r)	return;
	m = (l+r)>>1;
	Build(l,m,k+k);
	Build(m,r,k+k+1);
}

void Myscanf()
{
	m = 1;
	double x1,x2,y1,y2;
	scanf("%d",&n);
	for(int i=0; i<n; i++)
	{
		scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
		point[m] = y1;
		x_line[m].x = x1;
		x_line[m].y1 = y1;
		x_line[m].flag = 1;
		x_line[m++].y2 = y2;
		point[m] = y2;
		x_line[m].x = x2;
		x_line[m].y1 = y1;
		x_line[m].flag = -1;
		x_line[m++].y2 = y2;
	}
	
}

void Point_Do()
{
	int mi = 0;
	sort(point+1,point+m,cmp);
	sort(x_line+1,x_line+m,comp);
	xm = m;
	for(int i=1; i<m; i++)
	{
		if(point[i]!=point[mi])		point[++mi] = point[i]; 		//去重
	}
	m = mi;
}

int Bin(double xi)
{
	int l = 1, r = m;
	int mi;
	while(l<=r)
	{
		mi = (l+r)>>1;
		if(xi == point[mi])	return mi;
		if(xi > point[mi])	l = mi+1;
		else r = mi-1;
	}
	return -1;
}

void update(int l, int r, int k, line cur)
{
	if(tree[k].l==tree[k].r-1)
	{
		if(tree[k].flag == 1 && cur.flag == 1)	tree[k].f = cur.x;
		else if(tree[k].flag==2 && cur.flag==-1){
			tree[k].x +=( cur.x - tree[k].f );
			tree[k].f = 0.0;
		}
		tree[k].flag+=cur.flag;	
		return;
	}
	int mi = (tree[k].l+tree[k].r)>>1;
	if(l>=mi)	update(l,r,k+k+1,cur);
	else if(r<=mi)	update(l,r,k+k,cur);
	else{
		update(l,mi,k+k,cur);
		update(mi,r,k+k+1,cur);
	}
	return;
}

double query(int k)
{
	if(tree[k].l + 1==tree[k].r)	return (point[tree[k].r]-point[tree[k].l])*tree[k].x;
	return query(k+k) + query(k+k+1);
}

int Ans()
{
	for(int i=1;i<xm;i++)
	{
		int x = Bin(x_line[i].y1);
		int y = Bin(x_line[i].y2);
		update(x,y,1,x_line[i]);
	}
}

int main()
{
	int Case;
	scanf("%d",&Case);
	while(Case--)
	{
		memset(tree,0,sizeof(tree));
		memset(point,-1,sizeof(point));
		memset(x_line,0,sizeof(x_line));
		Myscanf();
		Point_Do();
		Build(1,m,1);
		Ans();
		printf("%.2lf\n",query(1));		
	}

	return 0;
}

主要思路就是将y轴离散为线段树,然后,将x轴转换为状态,其实也可以x为线段树,y为状态的


管道机器人手臂机械结构设计cad【8张】+三维图+设计说明书+绛重 履带式管道机器人适用于各种管道环境,包括直管道、弯曲管道、水平管道、垂直管道等,其灵活性和适应性使得它可以应对不同形状和尺寸的管道,完成全面的检测和维护工作。管道机器人研究具有重要的现实意义和深远的社会影响,通过提高工作效率、降低人员风险、提升服务质量、节约成本资源和促进科技创新等方面的作用,为现代工程技术领域的发展和进步做出了积极的贡献。管道机器人是一种能够在管道内部执行各种任务的智能机器人,而管道机器人的机械臂对于管道机器人在管道内执行任务的灵活性、稳定性和效率至关重要。 阅读详情

相关推荐

【C++】小猫钓鱼纸牌游戏--C++实现

小猫钓鱼问题: 描述:初始,两个人各有n张牌(牌面0-10),顺序固定,只能按顺序出牌。然后,两个人轮流在桌面上以接龙的方式出牌,当某个人放置的牌在桌面上已经出现时,他收起相同牌面及其中间的牌作为自己的筹码,同时需要再放一张牌到桌面。某人手上的牌出完后,另一个人继续出,直到两人手上都没牌为止,输出结束时两个人手上的筹码数。 #include<iostream> using namespace std; struct queue { int head; //队列首 int tail; //

qq_41344430的博客 3202

Poj 1255 覆盖的面积 2014-07-28 12:29 116人阅读 评论(0) 收藏...

覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3553Accepted Submission(s): 1743 Problem Description 给定平面上若干矩形,求出被这些矩形...

weixin_34185560的博客 122

静态时序分析(STA)_深入解析Data to Data Checks的零周期挑战

本文深入解析了静态时序分析(STA)中Data to Data Checks的核心概念与零周期挑战。重点探讨了当Setup要求值超过时钟周期时,工具如何调整发射沿,并导致Hold检查的发射与捕获沿“分裂”这一反直觉现象。文章通过案例详细解读了时序报告,并提供了通过调整约束或接受多周期保持两种策略来应对这一挑战,帮助工程师正确理解和处理此类复杂时序检查。

weixin_29204205的博客 350

线段树扫描线问题(HDU - 1255 POJ - 1177 HDU 1542等等)

  博主真的很厉害,写得非常好,我学到了很多知识,感激博主,我直接转载了这个博客,以后用来做模板。 博客转自:https://blog.youkuaiyun.com/lwt36/article/details/48908031; HDU 1542 [POJ 1151] Atlantis (矩形面积并) 题意: 求N&lt;=100个矩形的面积并 分析: 离散化: 这些...

qq_38367681的博客 458

Virtuoso集成HspiceD:打通模拟设计全流程的仿真与PEX实战

本文详细介绍了Virtuoso集成HspiceD在模拟设计全流程中的应用,包括仿真与PEX实战。通过无缝衔接Virtuoso和HspiceD,设计师可以在同一环境中完成从原理图设计到PEX后仿真的全流程,大幅提升工作效率。文章还提供了仿真环境配置、前仿真关键设置、PEX全流程详解以及性能调优等实用技巧。

weixin_29271263的博客 96

MOS管基础知识及应用电路Multisim仿真

本文系统介绍了MOS管的基础知识及其在电子电路中的典型应用。首先详细解析了MOS管的基本结构、分类和工作原理,包括NMOS、PMOS及CMOS的特性差异。重点阐述了MOS管的三种放大组态电路(共源、共漏、共栅)及其小信号模型分析。随后通过Multisim仿真验证了MOS管在防反接电路、开关电路、放大电路、逻辑门电路、电平转换电路和开关电源(BUCK、BOOST、BUCK-BOOST)等应用中的实际表现。文章还深入探讨了自给偏压和分压式偏置电路的设计要点。全文通过理论分析与仿真实验相结合的方式,全面展示了MO

XU157303764的博客 1482

POJ1255-覆盖的面积(线段树+扫描线)

Problem Description 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1<=N<=1000),代表矩形的数量,然后是N行数据,每一行包含四个浮点数,代表平面上的一个矩形的左上角坐标和右下角坐标,矩形的上...

scau_cdx的博客 210

SystemVerilog从入门到实战

SystemVerilog复合数据类型概述 SystemVerilog增强了Verilog的数据建模能力,提供多种复合数据类型: 数组类型:包括定宽数组(固定大小)、动态数组(运行时分配)和多维数组,支持高效索引访问。 队列:结合数组和链表特性,支持两端快速插入/删除操作,提供push/pop等方法。 关联数组:键值对存储结构,支持稀疏数据存储和快速查找,提供exists/delete等方法。 结构体:组合不同类型数据成员,支持打包(packed)形式以优化存储空间。 枚举类型:为数值赋予语义名称,支持状态

2301_79143213的博客 1225

洛谷 p1255 数楼梯 标准的大数姿势

题目描述 楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。 编一个程序,计算共有多少种不同的走法。 输入输出格式 输入格式: 一个数字,楼梯数。 输出格式: 走的方式几种。 输入输出样例 输入样例#1: 4 输出样例#1: 5 说明 用递归会太慢,需用递推 (60% N

Panda!!!!!! 754

openpi 入门教程(一)安装、训练、微调与推理

OpenPI是由物理智能团队发布的机器人开源模型和软件包,包含两种主要模型:基于流的扩散视觉-语言-动作模型(VLA)的π₀模型和基于FAST动作标记器的自回归VLA的π₀-FAST模型。这些模型已在超过10,000小时的机器人数据上进行了预训练,并提供了基础模型检查点,支持开箱即用或根据用户数据集进行微调。OpenPI的实验性质意味着它可能不适用于所有平台,但鼓励研究人员和从业者进行创造性实验。运行这些模型需要至少具备NVIDIA GPU,推荐使用RTX 4090或更高规格的显卡。OpenPI支持在Ubu

2506_90492529的博客 5106

华为OD机试新系统真题【迷宫相遇】

华为OD机试 新系统真题【迷宫相遇】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【迷宫相遇】多语言题解。

qq_45776114的博客 766

POJ 1177 Picture & HDU 1255 覆盖的面积 【线段树+离散化+扫描线】

题目来源: POJ http://poj.org/problem?id=1177 HDU :http://acm.hdu.edu.cn/showproblem.php?pid=1255 ★实在是蔡,扫描线居然硬是看了一天,就发篇博客说说叭 扫描线: 扫描线一般运用在图形处理上面,来解决一些周长 面积的问题(比如 给你很多矩形的位置,让你求他们总共的面积,注意这里的矩形可以重叠,所以问题就变得复杂了...

HungTeen的博客 427

【控制模块路径跟踪算法】PID控制算法实现路径跟踪(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对PID控制算法实现路径跟踪–飞思卡尔的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容PID属于无模型控制,调节三个环节的参数会产生什么影响根据控制对象的不同也会有很大差别PID形象解释小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

qq_35635374的博客 2386

[扫描线] Atlantis POJ - 1151 | HDU - 1255 覆盖的面积 | POJ - 1177 Pictur

poj 1151 扫描线 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; #define db double const int maxn = 2005; struct node { double...

蒟蒻的最后的倔强 242

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HDU1255 覆盖的面积 【扫描线】

覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3743    Accepted Submission(s): 1838 Problem Description 给定平面上若干矩形,求出被这些矩形覆盖

长风的专栏 968

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hdu 1255 覆盖的面积(扫描线)

题意:有T组测试数据,每组数据先给一个数字N,接下来的N行里,每行四个浮点数表示矩形的左上角坐标和右下角坐标,要求这些矩形至少覆盖过两次的面积。         与POJ 1151 Atlantis 的差别是,我们在答案里加上的不是覆盖一次的长度乘以两条线之间x坐标的差,而是用覆盖两次的长度,那么问题就变成如果从覆盖一次的面积得到覆盖两次的面积。         为叙述方便,我们假设len[2

3804

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

线段树:扫面线专题

分析: 1.矩形比较多,坐标也很大,所以横坐标需要离散化(纵坐标不需要),熟悉离散化后这个步骤不难,所以这里不详细讲解了,不明白的还请百度 2.重点:扫描线法:假想有一条扫描线,从左往右(从右往左),或者从下往上(从上往下)扫描过整个多边形(或者说畸形。。多个矩形叠加后的那个图形)。如果是竖直方向上扫描,则是离散化横坐标,如果是水平方向上扫描,则是离散化纵坐标。下面的分析都是离散化横坐标的,并

小菜鸟。。 410

HDU 1255 覆盖的面积 线段树

题意:给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 题解:和 poj1151 类似,不过要求的是面积的交,同样是先离散化然后枚举x坐标。此题更新时求y方向的“合法长度”相对于 poj1151 还有些区别, 值得比较比较。并且用lazy貌似也不合适,必须跟新至单元,因为每个节点既受父节点影响,也受子节点影响。 len[1]是覆盖一次的长度,len[2]是覆盖次数>= 2的长

1598

【hdu1255】覆盖的面积(矩形面积交+线段树+扫描线)

想不通<cmath>库里怎么会有叫做y1的关键字 ╮(╯▽╰)╭

AFO 516

HDU 1255 覆盖的面积(离散化+线段树)

覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5714 Accepted Submission(s): 2850 Problem Description 给定平面上若干矩形,求出被这些矩

Usher_Ou的博客 389

扫描线——学习笔记

扫描线是一种用来处理矩形相交的面积问题的算法 渐近时间复杂度约为O(nlogn)O(nlogn)O(nlogn) Q1. 在坐标系给定n个矩形(以左下/右上角坐标给出) 求这些矩形面积的并 例如下图 n=2 矩形1: (1,1) (3,3) 矩形2: (2,2) (4,4) A1. 扫描线的过程大致可以描述为 将整个面积并 以n个矩形的 2n条纵边为界 分割...

niiick 1061

HDU1255 覆盖的面积(线段树,离散化,扫描线,矩形面积交)

题目: 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6037    Accepted Submission(s): 3039 Problem Description 给定平面上若干矩形,

riba2534的博客 745

线段树扫描线求面积交和并、周长 [POJ 1177] [HDU 1255] [HDU 1542]

今天来谈一谈线段树扫描线求相关的二维平面上多个矩形的面积之交、面积之并、周长等相关问题。首先,有几道模板题目:http://poj.org/problem?id=1177 [求周长]http://acm.hdu.edu.cn/showproblem.php?pid=1255 [求面积之交]http://acm.hdu.edu.cn/showproblem.php?pid=1542 [求面积之并]这...

chen_YongZu的博客 459

hdu1255 覆盖的面积 扫描线+线段树+离散化

#include #include #include #include using namespace std; #define L(x) (x<<1) #define R(x) (x<<1|1) const int MAXN=2000+100; int n,edge_cnt; double y[MAXN]; struct node { int l,r,lazy; double l

AC_kereo的专栏 824

hdu 1255 覆盖的面积 线段树扫描线求重叠面积

这道题和poj1151,hdu1542差不多,扫描线详细讲解http://blog.youkuaiyun.com/youngyangyang04/article/details/7787693但是这个是求重叠的面积,需要处理的细节还是挺多的,我有单独写了一个求和函数sum,因为放在insert里面求和会遇到很多问题啊,还有就是离散花的时候也会遇到各种问题,总之要细心啊,敲代码的时候别溜号,我就老六号

代码随想录 1463

hdu 1255 覆盖的面积

与poj1151略有不同 由于是大于等于2 的有效 所以应该更新到点

大风车 343
上一篇: Poj 2528 Mayor's posters
下一篇: Hdu 1507 Uncle Tom's Inherited Land*
梁千仞
博客等级 码龄15年 12粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值