题目描述

平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入

输入仅包含两行,每行描述一个矩形。

在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出

输出仅包含一个实数,为交的面积,保留到小数后两位。

题解

两个矩形的交就是面积的交,这是属于二维的问题。让我们一步一步出发,先从一维开始推导。(放心,不难_)

一维线段的交:

让我们在这假设有两条线段,小蓝b和小红r,1,2分别为他们的左右端点。

小蓝由左向右运动,小红由右向左运动。

经历阶段

  1. 你我永世不见(不相交)

    让我们细心观察,发现此时 b2<r1

  2. 你我擦肩而过(相交为0)

    细心观察, b1=r1

  3. 你我庆幸相逢(相交)

    观察可得,b1<r1,b2<r2

    但是!由于牵扯到两线段的长短,情况很多,故可根据不相交的区域来间接求得。

  4. 你我曲终人散(相交为0)

    观察again!r2==b1

  5. 你我形同陌路(不相交)

    最后一次look!r2<b1

    接下来让我们结合以上5种情况:

结果不然而喻~

二维矩形求交

让我们请出升级版的小蓝和小红~(长方形和正方形都是矩形哦,这里为了方便,使用的是正方形)

题目输入的是矩形的相对坐标,我们设坐标为分别为

bx1,by1,bx2,by2

rx1,ry1,rx2,ry2

让我们假设他们相交了,进行解题~

我们设黑色矩形的左下角坐标为(hx1,hy1),右上角坐标为(hx2,hy2)。

经过细细推敲我发现如下规律:

hx1=max(min(bx1,bx2),min(rx1,rx2))

hy1=max(min(by1,by2),min(ry1,ry2))

hx2=min(max(bx1,bx2),max(rx1,rx2))

hy2=min(max(by1,by2),max(ry1,ry2))

刚看到这些你可能会懵懵的,但是你举几个例子试试看哦!

你会发现数学真奇妙

但是!什么时候才是不相交呢?我们来个不相交的情况你就懂了!

此时你会发现 hx1>hx2,hy1>hy2!

这就不是相交了,于是输出0,00就行了!

经过漫长的图示,终于可以写代码了!废话少说,代码走起!

(我为了创建更少的变量,使用了数组,相信聪明的你一定会看懂的~)

#include <iostream>
#include <cstdio>
#include <cmath>
#define min(x,y) ((x)<(y)?x:y)
#define max(x,y) ((x)>(y)?x:y)
using namespace std; int main()
{
double a1[4],a2[4],a3[4],area;
//输入数据
for(int i=0;i<4;i++) cin>>a1[i];
for(int i=0;i<4;i++) cin>>a2[i];
//计算相交矩形的左下和右上顶点坐标
a3[0]=max(min(a1[0],a1[2]),min(a2[0],a2[2]));
a3[1]=max(min(a1[1],a1[3]),min(a2[1],a2[3]));
a3[2]=min(max(a1[0],a1[2]),max(a2[0],a2[2]));
a3[3]=min(max(a1[1],a1[3]),max(a2[1],a2[3]));
if(a3[0]>a3[2]||a3[1]>a3[3]){
//一定不相交
printf("0.00");
} else{
area = (abs(a3[2]-a3[0])*abs(a3[3]-a3[1]));
printf("%.2f",area);
}
return 0;
}

小提示

C,C++中经过我的查阅,是没有和double类型相对应的max和min函数的,所以,我这里宏定义了一下~

如果你知道有更好的方法可以在下方评论哦!我看到的话一定会回复你的

【题解】[蓝桥杯] [基础练习VIP]矩形面积交的更多相关文章

  1. 问题 1462: [蓝桥杯][基础练习VIP]Huffuman树

    题目描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0,  p1,  …,  pn-1},用这列数构造Huffman树的过程如下: ...

  2. 问题 1476: [蓝桥杯][基础练习VIP]龟兔赛跑预测 (模拟)

    题目链接 题目描述 话说这个世界上有各种各样的兔子和乌龟,但是 研究发现,所有的兔子和乌龟都有一个共同的特点--喜欢赛跑.于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研 ...

  3. 问题 1936: [蓝桥杯][算法提高VIP]最大乘积

    问题 1936: [蓝桥杯][算法提高VIP]最大乘积 时间限制: 1Sec 内存限制: 128MB 提交: 77 解决: 16 题目描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? ...

  4. 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)

    B. 腾讯益智小游戏—矩形面积交(简单) 1000ms 262144K   腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的.聪明的你能解出来吗?看下面的题目接招吧 ...

  5. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

  6. Java实现 蓝桥杯VIP基础练习 矩形面积交

    描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩 ...

  7. 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交

    E - 秋实大哥与家 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  8. 【hdu1255】线段树求矩形面积交

    题意大概就是上图这个样子.<=100组测试数据,每组<=1000个矩形. 题解: 这个问题怎么解决..做了上一题矩形面积并应该就会了.. 对于每个节点维护3个值: cnt:该节点所代表的这 ...

  9. C语言 · 矩形面积交

    问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行,每行描述一个矩形. 在每行中 ...

  10. 51nod1302 矩形面积交

    有2N个矩形,这些矩形被标号为0 ~ 2N-1,对于第i个矩形其长宽分别为X[i]与Y[i].现在要把这2N个矩形分为两组,每组N个,每个矩形恰好分到两组中的一组里.分成两组后,设两组分别为A组.B组 ...

随机推荐

  1. VsCode新建Java、SpringBoot、Python、JavaWeb项目的基本步骤

    新建Java项目 选中正上方的搜索框,按下F1快捷键,输入create Java,即可出现这样的一个命令: 选中这个: 然后为新创建的项目选择一个合适的位置就好啦! 新建SpringBoot项目 选中 ...

  2. 关于Spring注解的基础详解(补充上次并不清楚的内容)

    注解,需要在.xml文件里面加这么一句话:<context:component-scan base-package=""/>(组件) Component注解 主要用于接 ...

  3. GPT-4 来了!这些开源的 GPT 应用又要变强了

    近日,在 GPT-3.5 发布的半年后,OpenAI 正式推出了大版本的 GPT-4,不同于 GPT-3 到 GPT-3.5 耗时两年,这次版本升级只用了半年.如果你对 OpenAI 不熟悉,答应我读 ...

  4. 给生活加点惊喜,做创意生活的原型设计师丨编程挑战赛 x 选手分享

    前言 做产品的大都跳过一个坑:我有了一个很好的产品创意,只差一个程序员帮我实现编程了. 事实上从产品创意到落地上线,中间需要经过非常复杂的过程,细节的逻辑流程才是难点,创意不能落地,并不值钱. 本文作 ...

  5. 控制论个人学习笔记-线性系统的校正方法&现代控制论基础

    note 2020-08-05搬运 下面的内容来自(我的CSDN博客)[https://blog.csdn.net/weixin_45183579/article/details/105201314] ...

  6. 使用cmd命令行安装 windows系统

    条件:Microsoft WindowsPE 或其他第三方 WindowsPE 1. 使用 diskpart 分区: list disk:列出所有磁盘 select disk  编号:选择某块磁盘 c ...

  7. JUC源码学习笔记8——ConcurrentHashMap源码分析1 如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移

    源码基于jdk1.8 这一片主要讲述ConcurrentHashMap如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移 系列文章目录和关于我 一丶ConcurrentHashMap概 ...

  8. Prometheus Operator 与 kube-prometheus 之一-简介

    简介 Prometheus Operator Prometheus Operator: 在 Kubernetes 上管理 Prometheus 集群.该项目的目的是简化和自动化基于 Prometheu ...

  9. java网络编程--5 URL 下载网络资源

    java网络编程--5 URL 下载网络资源 1.8.URL 统一资源定位符,定位互联网的某一个资源 DNS域名解析 www.baidu.com -->xxx.xxx.xxx.xxx // 协议 ...

  10. 谷歌浏览器配置Selenium,并配合python使用

    python环境准备 python 需要安装selenium ,这个直接pip安装即可 pip install selenium -i http://pypi.douban.com/simple -- ...