華為OD機試_2025 B卷_矩形相交的面積(Python,100分)(附詳細解題思路)

題目描述

給出3組點坐標(x, y, w, h),-1000<x,y<1000,w,h為正整數。

(x, y, w, h)表示平面直角坐標系中的一個矩形:

x, y為矩形左上角坐標點,w, h向右w,向下h。

(x, y, w, h)表示x軸(x, x+w)和y軸(y, y-h)圍成的矩形區域;

(0, 0, 2, 2)表示 x軸(0, 2)和y 軸(0, -2)圍成的矩形區域;

(3, 5, 4, 6)表示x軸(3, 7)和y軸(5, -1)圍成的矩形區域;

求3組坐標構成的矩形區域重合部分的面積。

輸入描述
3行輸入分別為3個矩形的位置,分別代表“左上角x坐標”,“左上角y坐標”,“矩形寬”,“矩形高” -1000 <= x,y < 1000

輸出描述
輸出3個矩形相交的面積,不相交的輸出0。

用例
輸入

1 6 4 4
3 5 3 4
0 3 7 3

輸出

2

說明
在這里插入圖片描述

矩形重疊面積計算算法詳解

核心解題思路

本題目要求計算三個矩形重合部分的面積。核心思路是通過分析矩形在x軸和y軸上的投影,確定三個矩形共同重疊的區域。解題步驟如下:

關鍵步驟

  1. 矩形坐標轉換

    • 每個矩形由左上角坐標(x,y)、寬度w、高度h定義
    • x軸投影:左邊界x,右邊界x + w
    • y軸投影:由于坐標系向下為負,上邊界y,下邊界y - h
  2. 重疊區域確定

    • x軸重疊:取三個矩形左邊界最大值作為重疊左邊界,右邊界最小值作為重疊右邊界
    • y軸重疊:取三個矩形上邊界最小值作為重疊上邊界,下邊界最大值作為重疊下邊界
    • 重疊寬度:重疊右邊界 - 重疊左邊界
    • 重疊高度:重疊上邊界 - 重疊下邊界
  3. 面積計算

    • 當重疊寬度和高度都為正時,面積 = 寬度 × 高度
    • 否則面積為0

完整代碼實現

def main():# 讀取三個矩形的參數rects = []for _ in range(3):data = input().split()# 轉換為浮點數處理(題目整數但為統一接口)x = float(data[0])y = float(data[1])w = float(data[2])h = float(data[3])rects.append((x, y, w, h))# 計算三個矩形的x軸重疊區域left_bound = max(rects[0][0], rects[1][0], rects[2][0])right_bound = min(rects[0][0] + rects[0][2], rects[1][0] + rects[1][2], rects[2][0] + rects[2][2])# 計算三個矩形的y軸重疊區域top_bound = min(rects[0][1], rects[1][1], rects[2][1])bottom_bound = max(rects[0][1] - rects[0][3],rects[1][1] - rects[1][3],rects[2][1] - rects[2][3])# 計算重疊區域的寬度和高度width = right_bound - left_boundheight = top_bound - bottom_bound# 計算重疊面積(當寬度和高度都為正時)if width > 0 and height > 0:area = width * heightelse:area = 0# 輸出整數部分(題目要求整數)print(int(area))if __name__ == "__main__":main()

算法原理解析

1. 矩形投影原理

# 矩形在x軸投影:[x, x + w]
# 矩形在y軸投影:[y - h, y]
  • x軸:從左邊界x到右邊界x+w
  • y軸:從下邊界y-h到上邊界y(注意坐標系向下為負)

2. 重疊區域計算

# x軸重疊
left_bound = max(rect1_x, rect2_x, rect3_x)
right_bound = min(rect1_x + w1, rect2_x + w2, rect3_x + w3)# y軸重疊
top_bound = min(rect1_y, rect2_y, rect3_y)
bottom_bound = max(rect1_y - h1, rect2_y - h2, rect3_y - h3)
  • 左邊界:取三個矩形左邊界最大值(最右邊的左邊界)
  • 右邊界:取三個矩形右邊界最小值(最左邊的右邊界)
  • 上邊界:取三個矩形上邊界最小值(最靠下的上邊界)
  • 下邊界:取三個矩形下邊界最大值(最靠上的下邊界)

3. 面積計算邏輯

width = right_bound - left_bound
height = top_bound - bottom_bound
if width > 0 and height > 0:area = width * height
else:area = 0
  • 有效性檢查:寬度和高度必須為正才有重疊
  • 整數輸出:題目要求輸出整數部分

示例解析

示例輸入:

1 6 4 4
3 5 3 4
0 3 7 3

步驟解析:

  1. 矩形1:x=1, y=6, w=4, h=4

    • x軸:[1, 5]
    • y軸:[6-4, 6] = [2, 6]
  2. 矩形2:x=3, y=5, w=3, h=4

    • x軸:[3, 6]
    • y軸:[5-4, 5] = [1, 5]
  3. 矩形3:x=0, y=3, w=7, h=3

    • x軸:[0, 7]
    • y軸:[3-3, 3] = [0, 3]
  4. 重疊區域計算

    • x軸:左邊界 = max(1, 3, 0) = 3
      右邊界 = min(5, 6, 7) = 5
      寬度 = 5 - 3 = 2

    • y軸:上邊界 = min(6, 5, 3) = 3
      下邊界 = max(2, 1, 0) = 2
      高度 = 3 - 2 = 1

  5. 面積:2 × 1 = 2

輸出:2

邊界情況測試

測試1:完全重疊

輸入:
0 10 10 10
0 10 10 10
0 10 10 10計算:
x軸:max(0,0,0)=0, min(10,10,10)=10 → 寬度=10
y軸:min(10,10,10)=10, max(0,0,0)=0 → 高度=10
面積=100

測試2:部分重疊

輸入:
1 5 4 5
2 6 4 4
3 4 5 6計算:
矩形1:x[1,5], y[0,5]
矩形2:x[2,6], y[2,6]
矩形3:x[3,8], y[-2,4]x軸:max(1,2,3)=3, min(5,6,8)=5 → 寬度=2
y軸:min(5,6,4)=4, max(0,2,-2)=2 → 高度=2
面積=4

測試3:無重疊

輸入:
0 10 2 2
3 8 2 2
5 5 2 2計算:
x軸:max(0,3,5)=5, min(2,5,7)=25>2)
寬度=2-5=-3 → 無效
面積=0

總結與擴展

關鍵知識點

  1. 矩形表示:理解坐標系中矩形的數學表示
  2. 投影分析:將二維問題分解為兩個一維問題
  3. 邊界計算:最大值最小值確定重疊區域
  4. 有效性檢查:處理無重疊情況

擴展思考

  1. 非軸對齊矩形

    # 使用旋轉矩陣處理旋轉的矩形
    def rotate_rect(rect, angle):# 計算旋轉后的頂點# 使用分離軸定理檢測重疊
    
  2. 三維空間重疊

    def clip_cuboids(cuboids):# 在x,y,z三個維度分別計算# 計算體積而非面積
    
  3. 部分重疊閾值

    def clip_with_threshold(rects, threshold=0.5):# 計算重疊面積與總面積的比例# 返回滿足閾值的重疊區域
    
  4. 漸進式計算

    class OverlapCalculator:def __init__(self):self.left = -float('inf')self.right = float('inf')self.top = float('inf')self.bottom = -float('inf')def add_rect(self, x, y, w, h):self.left = max(self.left, x)self.right = min(self.right, x + w)self.top = min(self.top, y)self.bottom = max(self.bottom, y - h)return self.get_overlap()def get_overlap(self):width = self.right - self.leftheight = self.top - self.bottomif width > 0 and height > 0:return width * heightreturn 0
    

核心啟示:通過將復雜問題分解為簡單維度,利用邊界值分析確定交集,本算法高效解決了多矩形重疊面積計算問題。這種"分而治之"的思路是解決復雜幾何問題的核心策略。

初學者可從中學習:

  1. 空間問題的降維處理技巧
  2. 邊界值分析的數學方法
  3. 算法效率與簡潔性的平衡
  4. 實際問題的數學模型構建
  5. 算法擴展與適用性分析能力

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86034.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86034.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

17、Rocket MQ快速實戰以及核?概念詳解

? 、MQ簡介 MQ&#xff1a;MessageQueue&#xff0c;消息隊列。是在互聯?中使??常?泛的—系列服務中間件。 這個詞可以分兩個部分來看&#xff0c; —是Message&#xff1a;消息。消息是在不同進程之間傳遞的數據。這些進程可以部署在同—臺機器上&#xff0c;也可以 分…

設計模式之手寫策略模式實現動態支付(Java實現)

首先&#xff0c;定義一個接口類 import java.util.Map;public interface PayInterface {/*** 支付方法* param amount 支付金額* param paymentInfo 支付信息&#xff08;如卡號、密碼等&#xff09;* return 支付結果*/boolean pay(double amount, Map<String, String>…

Spring Boot 虛擬線程 vs WebFlux:誰更勝一籌?

Spring Boot 作為構建現代 Java 應用程序的強大框架,為開發者提供了多種處理并發和可擴展性的解決方案。其中最受關注的兩種方案是 Spring Boot 虛擬線程(Java 21 引入)和 Spring Boot WebFlux(基于響應式編程)。雖然兩者都致力于優化資源利用率和提升高并發處理能力,但在…

淘寶商品搜索接口|關鍵字獲取商品列表API接入指南

在電商領域&#xff0c;淘寶作為中國最大的電子商務平臺之一&#xff0c;擁有海量的商品資源。對于開發者而言&#xff0c;通過淘寶開放平臺提供的 API 接口&#xff0c;能夠實現與淘寶平臺的深度整合&#xff0c;其中關鍵字搜索商品 API 接口尤為重要。它允許開發者根據特定的…

Centos 離線部署(MQTT)EMOX腳本并設置開機自啟

文件結構 install_emqx.sh #!/bin/bash # Filename: install_emqx.sh # Description: EMQX離線一鍵部署腳本 (針對特殊目錄結構)# 檢查root權限 if [[ $EUID -ne 0 ]]; thenecho "請使用root權限運行此腳本&#xff01;" exit 1 fi# 定義依賴包和安裝路徑 DEP_RPM&…

機器學習基礎:從概念到應用的全面解析

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#, Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開…

【機器學習1】線性回歸與邏輯回歸

?邏輯回歸與線性回歸的主要區別在于理論基礎、應用場景和數學模型。 1 線性回歸 1.1 理論基礎 線性回歸主要用于建模自變量與連續性因變量之間關系的統計方法&#xff0c;試圖利用一條線來擬合自變量與因變量之間的線性關系。 1.2 應用場景 從應用場景來說&#xff0c;適…

小程序 頂部欄標題欄 下拉滾動 漸顯白色背景

![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/3164fd0e6d6848efaa1e87e02c35179e.png 下拉 100px 后 變成漸變成白色 顯示原理 <wd-navbar fixed safeAreaInsetTop :bordered"false":custom-style"background-color: rgba(255, 255, 255, op…

Java底層原理:深入理解類加載機制與反射

一、Java類加載機制 Java類加載機制是Java運行時環境的重要組成部分&#xff0c;它負責將字節碼文件加載到JVM內存中&#xff0c;并將其轉換為可執行的類。類加載機制的實現涉及類加載器&#xff08;ClassLoader&#xff09;、類加載過程和類加載器的層次結構。 &#xff08;…

Android 中查看數據庫內容方式

一、背景 創建的db數據庫&#xff0c;有時候需要查看數據庫中的數據內容,或者查看數據是否有更新到數據等等。這時候就需要查看數據庫的內容。 二、數據庫路徑 博主用的是第三方的greendao數據庫框架,生成的.db文件路徑如下:(路徑僅供參考) /data/data/app_package/database…

unity實現浮動組件

目錄 前言方法后言組件代碼 前言 在unity中&#xff0c;要讓一個物體變得讓人感到輕飄飄的&#xff0c;就可以給一個物體添加上浮動組件。今天我們就來實現它。 方法 我們先來看一下 sin ? \sin sin函數的曲線。 在這條曲線上&#xff0c;隨著 x x x向右移動&#xff0c; y…

Cisco Nexus93240接口帶寬顯示異常高故障- bug

hardware: cisco N93240 software: 9.3(10) 1個萬兆接口&#xff0c;顯示的rate超出幾萬倍 開case查詢&#xff0c;告知是bug&#xff0c;需要版本升級解決。

pyhton基礎【15】函數進階一

目錄 一. 函數進階 1. 默認參數&#xff1a; 2. 關鍵字參數&#xff1a; 3. 可變參數&#xff1a; 4. 裝飾器&#xff1a; 5. 匿名函數lambda&#xff1a; 6. 高階函數&#xff1a; 7. 遞歸函數&#xff1a; 8. 類型注解&#xff1a; 二.函數參數的高級使用 缺…

【軟考高級系統架構論文】論企業應用系統的數據持久層架構設計

論文真題 數據持久層 (Data Persistence Layer) 通常位于企業應用系統的業務邏輯層和數據源層之間,為整個項目提供一個高層、統一、安全、并發的數據持久機制,完成對各種數據進行持久化的編程工作,并為系統業務邏輯層提供服務。它能夠使程序員避免手工編寫訪問數據源的方法…

ubuntu使用 Conda 安裝 pyseer詳細教程

pyseer 是一個用于 微生物全基因組關聯分析(GWAS) 的生物信息學工具。它可以幫助研究者識別微生物(如細菌)中與表型(如耐藥性、毒力、致病性)相關的遺傳變異。 一、安裝mamba conda install -n base -c conda-forge mamba二、創建虛擬環境 conda create -n pyseer-env …

Redis04

redis 一、redis的作用和使用場景 redis是一個內存級的高速緩存數據庫。&#xff08;對比磁盤IO&#xff09; 使用場景&#xff1a;1、并發訪問量大的 2、數據量小 3、修改不頻繁 項目中&#xff1a;1、驗證碼 2、登錄成功用戶信息 3、首頁&#xff08;模塊數據 輪播圖&…

計算機網絡學習筆記:TCP可靠傳輸實現、超時重傳時間選擇

文章目錄 一、TCP可靠傳輸實現二、TCP超時重傳時間選擇 一、TCP可靠傳輸實現 TCP可靠傳輸的實現&#xff0c;主要基于發送方和接收方的滑動窗口&#xff0c;以及確認機制&#xff1a; 發送方在未收到確認&#xff08;ACK&#xff09;前&#xff0c;可以將序號落在發送窗口內的…

Perl 正則表達式

Perl 正則表達式 引言 Perl 正則表達式&#xff08;Regular Expressions&#xff09;是Perl編程語言中一個強大且靈活的工具&#xff0c;用于字符串處理和模式匹配。正則表達式在文本處理、數據驗證、搜索和替換等任務中發揮著至關重要的作用。本文將深入探討Perl正則表達式的…

Security: RSA: 1024 bit 長度已經變得不安全了

文章目錄 參考推薦限制RHEL相關配置man crypto-policies包含的應用使用方法是配置文件include參考 https://csrc.nist.gov/pubs/sp/800/57/pt1/r2/final https://www.linuxquestions.org/questions/linux-security-4/1024-bit-dsa-vs-2048-bit-rsa-4175439131/ https://csrc.n…

第一課:大白話中的機器學習

各位看官好啊!今天咱們來聊一個聽起來高大上但實際上特別接地氣的玩意兒——機器學習。別被這名字嚇到,它其實就是教電腦像人類一樣學習知識的一套方法。想象一下你教你家狗子坐下、握手的過程,機器學習差不多就是這么回事,只不過"學生"換成了電腦。 一、啥是機…