2023年蓝桥杯省赛——矩形面积总和

目录

题目链接: 1.矩形总面积 - 蓝桥云课 (lanqiao.cn)

思路

暴力

数学杯思路

数学逻辑 

难点之重合区域

代码实现

总结


题目链接: 1.矩形总面积 - 蓝桥云课 (lanqiao.cn)

思路

暴力

        开幕雷击,我直接开始暴力,但是我暴力到一半,发现暴力的方法如果要把全部的矩形分布情况都包含进去的话,真的太多了,太长了,太臭了。随即我意识到蓝桥杯其实是数学杯,wori,我来看看。

        下面是的暴力到一半的代码,我知道暴力不出来了,就直接先截断很多情况没有考虑,直接赶紧搞定就输出了。而且这里的面积处理虽然是对的但是处理的太复杂了。 

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 接收参数
        // 矩形 1 左下角 ↙
        long zx1_x = scanner.nextInt();
        long zx1_y = scanner.nextInt();
        // 矩形 1 右上角 ↗
        long ys1_x = scanner.nextInt();
        long ys1_y = scanner.nextInt();
        // 矩形 1 左上角 ↖
        long zs1_x = zx1_x;
        long zs1_y = ys1_y;
        // 矩形 1 右下角 ↘
        long yx1_x = ys1_x;
        long yx1_y = zx1_y;

        // 矩形 2 左下角 ↙
        long zx2_x = scanner.nextInt();
        long zx2_y = scanner.nextInt();
        // 矩形 2 右上角 ↗
        long ys2_x = scanner.nextInt();
        long ys2_y = scanner.nextInt();
        // 矩形 2 左上角 ↖
        long zs2_x = zx2_x;
        long zs2_y = ys2_y;
        // 矩形 2 右下角 ↘
        long yx2_x = ys2_x;
        long yx2_y = zx2_y;

        
        // 判断两个矩形摆放的位置的类型
        long s = 0;
        if ((zx1_x >= zx2_x && zx1_y >= zx2_y)||(zx1_x <= zx2_x && zx1_y <= zx2_y)) {
            // 是↗ or ↙摆的
            if (zx1_x < zx2_x) {
                // ↗
                long sAll = (ys2_y - yx1_y)*(ys2_x - yx1_x);
                long s1 = (yx2_y - yx1_y)*(yx2_x - yx1_x);
                long s2 = (zs2_y - zs1_y)*(zs2_x - zs1_x);
                s = sAll - s1 - s2;
            }else if (zx1_x > zx2_x) {
                // ↙
                long sAll = (ys1_y - yx2_y)*(ys1_x - yx2_x);
                long s1 = (yx1_y - yx2_y)*(yx1_x - yx2_x);
                long s2 = (zs1_y - zs2_y)*(zs1_x - zs2_x);
                s = sAll - s1 - s2;
            }
        }else {
            // 是↖ or ↘摆的
            if (zx1_x < zx2_x) {
                // ↘
                long sAll = Math.abs((zs1_y - yx2_y)*(zs1_x - yx2_x));
                long s1 = Math.abs((zx1_y - zx2_y)*(zx1_x - zx2_x));
                long s2 = Math.abs((ys1_y - ys2_y)*(ys1_x - ys2_x));
                s = sAll - s1 - s2;
            }else if (zx1_x > zx2_x) {
                // ↖
                long sAll = Math.abs((zs2_y - yx1_y)*(zs2_x - yx1_x));
                long s1 = Math.abs((zx2_y - zx1_y)*(zx2_x - zx1_x));
                long s2 = Math.abs((ys2_y - ys1_y)*(ys2_x - ys1_x));
                s = sAll - s1 - s2;
            }
        }
        System.out.println(s);
    }
}

直接裂开,头脑简单,四肢发达

数学杯思路

蓝桥杯,什么蓝桥杯,这个就是数学杯!!!!!!!!!!!

写蓝桥杯的题,写别慌写,先研究他的数学逻辑!!!!!!!!!!!!!!!

数学逻辑 

在研究这道题之前,我们先研究这道题的数学逻辑。

如果我问你:

        现在我有两个矩形,可能重合可能不重合,也可能部分相交,我会给你这两个矩形的左下角和右上角的坐标,如果我想用java代码求得这两个矩形覆盖的面积,重合部分只计算一次,你怎么做。

你可以答:

  1. 计算两个矩形各自的面积。首先,我们需要找到每个矩形的宽度和高度,这可以通过简单地将右上角的坐标减去左下角的坐标得出。然后,我们通过将宽度和高度相乘得出每个矩形的面积。

  2. 找出重叠区域的坐标。首先,我们需要找到重叠区域的左下角和右上角的坐标左下角坐标是两个矩阵左下角点的最大坐标右上角坐标是两个矩阵右上角点的最小坐标

  3. 计算重叠区域的面积。使用和第一步相同的方法,得出重叠区域的面积。

  4. 最后,我们通过将第一步得到的两个矩形的面积相加,然后减去第三步得到的重叠区域的面积,就可以得到两个矩形覆盖的总面积。因为重叠区域被计算了两次,所以我们需要将它从总面积中减去。

难点之重合区域

再问这个重叠区域的坐标是怎么找到的?

答:

  1. 左下角的坐标是这样找的:对于x坐标,我们比较两个矩形左下角的x坐标,取较大的那个;对于y坐标,我们比较两个矩形左下角的y坐标,也是取较大的那个。于是,我们得到的新的坐标点就是重叠区域左下角的坐标。

  2. 右上角的坐标是这样找的:对于x坐标,我们比较两个矩形右上角的x坐标,取较小的那个;对于y坐标,我们比较两个矩形右上角的y坐标,取较小的那个。得到的新的坐标点就是重叠区域右上角的坐标。

  3. 如果这样得到的重叠区域的左下角坐标比右上角对应的坐标大(也就是形成了一个“矩形”宽度或者高度小于0),我们就认为两个矩形没有重叠区域,此时可以直接将重叠区域的面积设为0。

这个逻辑大家稍微画一个图来理解一下就可以很清楚的懂了。

代码实现



import java.util.Scanner;

// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		// 接收参数
		// 矩形 1 左下角 ↙
		long zx1_x = scanner.nextInt();
		long zx1_y = scanner.nextInt();
		// 矩形 1 右上角 ↗
		long ys1_x = scanner.nextInt();
		long ys1_y = scanner.nextInt();

		// 矩形 2 左下角 ↙
		long zx2_x = scanner.nextInt();
		long zx2_y = scanner.nextInt();
		// 矩形 2 右上角 ↗
		long ys2_x = scanner.nextInt();
		long ys2_y = scanner.nextInt();

		
		// 分别计算两个矩形的面积
		long s1 = (ys1_y - zx1_y)*(ys1_x - zx1_x);
		long s2 = (ys2_y - zx2_y)*(ys2_x - zx2_x);
		
		// 计算重合部分的面积
		// 重合部分的左下角是大的那一个 x1 y1
		long x1 = Math.max(zx1_x, zx2_x);
		long y1 = Math.max(zx1_y, zx2_y);
		// 重合部分的右上角是小的那一个 x2 y2
		long x2 = Math.min(ys1_x, ys2_x);
		long y2 = Math.min(ys1_y, ys2_y);
		
		
		if (y2 - y1 < 0 || x2 - x1 < 0) {
			// 判断是否有重合的部分,这种情况就是没有重合的部分
			System.out.println(s1 + s2);
		}else {
			// 有重合的部分
			long sc = (y2 - y1)*(x2 - x1);
			System.out.println(s1 + s2 - sc);
		}	
	}
}

总结

这不是蓝桥杯,这是

数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯数学杯

记住了兄弟们,我也是服啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/497221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java学习之方法

目录 方法 方法声明格式&#xff1a; 调用方式&#xff1a; 详细说明 示例 --方法的声明及调用 语句块 练习 方法的重载(overload) 构成条件 示例 --方法重载 递归结构 缺陷 方法 方法(method)&#xff1a;一段用于完成特定功能的代码片段&#xff0c;类似于其他语…

Redis命令-List命令

4.6 Redis命令-List命令 Redis中的List类型与Java中的LinkedList类似&#xff0c;可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。 特征也与LinkedList类似&#xff1a; 有序元素可以重复插入和删除快查询速度一般 常用来存储一个有序数据&#xff…

算法系列--动态规划--背包问题(2)--01背包拓展题目

&#x1f495;"2024.3.28小米汽车发布"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–动态规划–背包问题(2)–01背包拓展题目 大家好,今天为大家带来的是算法系列--动态规划--背包问题(2)--01背包拓展题目 1.分割等和⼦集 链接: https:/…

能够解析任何编程语言的开源语法解析树 | 开源日报 No.171

tree-sitter/tree-sitter Stars: 14.6k License: MIT tree-sitter 是一个用于编程工具的增量解析系统。 该项目的主要功能、关键特性、核心优势包括&#xff1a; 通用性&#xff0c;能够解析任何编程语言高效性&#xff0c;能够在文本编辑器中每次按键都进行解析健壮性&…

Mysql的日志管理,备份与回复

目录 一、Mysql日志管理 1、日志的默认位置及配置文件 2、日志分类 2.1错误日志 2.2通用查询日志 2.3二进制日志 2.4慢查询日志 2.5中继日志 3、日志配置 4、日志查询 4.1查询通用日志是否开启 4.2查询二进制日志是否开启 4.3查看慢查询日志是否开启 4.4查询慢查…

web——rce,代码执行,命令执行

eval就会将里面的内容当成php来执行 ctf 第一 第二 过滤system\ 也可也怎么做 然后访问2.txt 第三&#xff08;参数逃逸&#xff09; 可以用这个&#xff0c;url中的eval是让get函数的使用&#xff0c;网页中的eval是为了让system中的函数起效 第四 过滤分号&#xff0c;因为上…

解决:PytorchStreamWriter failed writing file data

文章目录 问题内容问题分析解决思路 问题内容 今天在炼丹的时候&#xff0c;我发现模型跑到140步的时候保存权重突然报了个问题&#xff0c;详细内容如下&#xff1a; Traceback (most recent call last):File "/public/home/dyedd/.conda/envs/diffusers/lib/python3.8…

【Java核心能力】一篇文章了解 ZooKeeper 底层运行原理

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

Mysql数据库——主从复制与读写分离

目录 前言 一、主从复制 1.主从复制的定义 2.Mysql主从复制支持的类型 3.主从复制的过程 4. 主从复制出现的问题 5.解决方法 二、读写分离 1.读写分离的定义 2.读写分离的作用 3.读写分离作用场景 3.1基于程序代码内部实现 3.2基于中间代理层实现 4.主从复制与读…

Redis命令介绍

一、redis启动&#xff1a; 本地启动&#xff1a;redis-cli 远程启动&#xff1a;redis-cli -h host -p port -a password Redis 连接命令 1 AUTH password 验证密码是否正确 2 ECHO message 打印字符串 3 PING 查看服务是否运行 4 QUIT 关闭当前连接 5 SELECT index 切换…

UI设计案例,B端后台界面设计教程

B端产品是为“组织”提供服务&#xff0c;以业务为中心&#xff0c;追求时效性&#xff0c;在视觉上&#xff0c;内容为王&#xff0c;视觉为功能让步&#xff0c;追求简洁、清晰、克制、理性的视觉风格。B 端产品业务比较复杂&#xff0c;页面内容也会较多&#xff0c;B端界面…

Python与人工智能:气象领域的数据处理与模型优化

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…

LLM资料:中文embedding库

Highlight&#xff08;重点提示&#xff09; 理解LLM&#xff0c;就要理解Transformer&#xff0c;但其实最基础的还是要从词的embedding讲起。 毕竟计算机能处理的只有数字&#xff0c;所以万事开头的第一步就是将要处理的任务转换为数字。 面向中文的开源embedding库在自然…

MQ集合了

消息队列&#xff0c;FIFO &#xff1a;异步 解耦 削峰 复杂度上升 幂等 重复消费 消息丢失 / 可用性降低 mq故障 / 一致性要求 mq对比&#xff1a; activeMQ&#xff1a;jms规范&#xff0c;支持事务 xa协议 rabbitMQ&#xff1a;erlang 性能&#x1f44c; 高并发 多语…

react-router v6的Link组件relative属性解释

Link组件有一个名为relative的属性,值为route或path,默认为route 当Link的to为两个点时,配置relativeroute|path会有不同的效果, 之前由于路径嵌套不够深,看不出区别,于是尝试加深路径,一眼就看出了区别 官方解释 | React Router6 中文文档 下方代码请看根路径/cd及其二级路…

C++优先队列——priority_queue,函数对象,labmda表达式,pair等

头文件&#xff1a;#include<queue> 内部使用堆来实现&#xff0c;在需要或得最大的几个值或最小的几个值而不关心整个数组的顺序时非常好用。 用法&#xff1a; priority_queue<int, vector<int>, greater<int>>q; 第一个参数为堆中存储的元素。 …

vue 借助vue-amap插件对高德地图的简单使用

需求&#xff1a;实现点击获取经纬度、定位、对特殊位置标点及自定义信息窗体功能。 高德地图的官网API&#xff1a;概述-地图 JS API 1.4 | 高德地图API vue-amap的中文文档&#xff1a;组件 | vue-amap 实现&#xff1a; 1、安装vue-amap插件 npm install vue-amap --save…

AI预测福彩3D第20弹【2024年3月28日预测--第4套算法重新开始计算第6次测试】

今天继续对第4套算法进行测试&#xff0c;测试的目的主要是为了记录统计两套方案的稳定性和命中率&#xff0c;昨天的第二套方案已命中。今天是第5次测试&#xff0c;同样测试两个方案。废话不多说&#xff0c;直接上结果。 2024年3月28日福彩3D的七码预测结果如下 …

武忠祥《660题》高效刷题包+资料分享

660题的难度书虽然比较难&#xff0c;对于基础的考察比较深入&#xff0c;所以&#xff0c;有没有一种可能&#xff0c;做题太慢&#xff0c;是因为基础不好导致的&#xff01; 所以再继续做下去&#xff0c;就没有什么意义了&#xff0c;因为这就像是用一把钝刀去砍树&#x…

mybatis搭建开发环境

1.创建maven工程 2.配置pom.xml <!--数据库驱动--> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version> </dependency> <!--Mybatis--> <depend…