華為OD機試_2025 B卷_構成正方形數量(Python,100分)(附詳細解題思路)

題目描述

輸入N個互不相同的二維整數坐標,求這N個坐標可以構成的正方形數量。[內積為零的的兩個向量垂直]

輸入描述
第一行輸入為N,N代表坐標數量,N為正整數。N <= 100
之后的 K 行輸入為坐標x y以空格分隔,x,y為整數,-10<=x, y<=10

輸出描述
輸出可以構成的正方形數量。

用例
輸入

3
1 3
2 4
3 1

輸出

0

說明

(3個點不足以構成正方形)

輸入

4
0 0
1 2
3 1
2 -1

輸出

1

二維坐標構成正方形數量計算

核心解題思路

該題的關鍵在于利用幾何性質來高效判斷正方形的存在。已知兩個點((x_1,y_1))和((x_2,y_2)),根據正方形的幾何特征,可通過向量旋轉(90^{\circ})的方式計算出另外兩個可能的對角點坐標。

向量(\overrightarrow{AB}=(x_2 - x_1, y_2 - y_1)),將其旋轉(90{\circ})(順時針或逆時針),得到新向量。若原向量為((a,b)),順時針旋轉(90{\circ})后為((b,-a)),逆時針旋轉(90^{\circ})后為((-b,a))。基于此,根據已知兩點計算出另外兩個可能的對角點坐標,然后檢查這兩個點是否都存在于給定的坐標列表中。若存在,則說明這四個點可以構成一個正方形。由于每個正方形在遍歷點對的過程中會被計算(4)次(不同的邊作為起始邊),所以最終結果需要除以(4)。

完整代碼實現

# 定義一個函數來判斷兩個點是否相等
def are_points_equal(p1, p2):return p1[0] == p2[0] and p1[1] == p2[1]# 定義一個函數來檢查一個點是否存在于點列表中
def point_exists(points, p):for point in points:if are_points_equal(point, p):return Truereturn False# 讀取坐標數量
n = int(input())
coordinates = []# 讀取坐標并存入列表
for _ in range(n):x, y = map(int, input().split())coordinates.append((x, y))square_count = 0# 遍歷所有點對,檢查是否能構成正方形
for i in range(n):x1, y1 = coordinates[i]for j in range(i + 1, n):x2, y2 = coordinates[j]# 計算兩個可能的對角點x3, y3 = x1 - (y1 - y2), y1 + (x1 - x2)x4, y4 = x2 - (y1 - y2), y2 + (x1 - x2)p3 = (x3, y3)p4 = (x4, y4)if point_exists(coordinates, p3) and point_exists(coordinates, p4):square_count += 1# 計算另外兩個可能的對角點x5, y5 = x1 + (y1 - y2), y1 - (x1 - x2)x6, y6 = x2 + (y1 - y2), y2 - (x1 - x2)p5 = (x5, y5)p6 = (x6, y6)if point_exists(coordinates, p5) and point_exists(coordinates, p6):square_count += 1# 每個正方形被計算了4次,因此結果需要除以4
print(square_count // 4)

算法原理解析

點相等判斷函數 are_points_equal

該函數通過比較兩個點坐標的(x)值和(y)值是否分別相等,來判斷兩個點是否為同一個點。若(p1)的(x)坐標等于(p2)的(x)坐標,且(p1)的(y)坐標等于(p2)的(y)坐標,則返回 True,否則返回 False

點存在檢查函數 point_exists

遍歷給定的點列表 points,對于列表中的每一個點,調用 are_points_equal 函數檢查其是否與目標點 p 相等。若存在相等的點,則返回 True,表示目標點存在于列表中;遍歷結束仍未找到相等的點,則返回 False

主邏輯

  • 讀取坐標數量 n 和具體的坐標值并存入列表 coordinates
  • 兩層循環遍歷所有的點對 ((i, j))((i < j)):
    • 根據當前點對的坐標 ((x_1,y_1)) 和 ((x_2,y_2)),通過向量旋轉的幾何原理計算出兩組可能的對角點坐標(如 (x3,y3)(x4,y4)(x5,y5)(x6,y6) )。
    • 分別檢查每組對角點是否都存在于 coordinates 列表中。若存在,則 square_count 計數器加 (1)。
  • 由于每個正方形在遍歷點對的過程中會被計算 (4) 次(不同的邊作為起始邊),所以最終結果 square_count 需要除以 (4) 得到實際的正方形數量。

示例解析

示例一(輸入 (3) 個點)

輸入:

3
1 3
2 4
3 1

在兩層循環中,由于只有 (3) 個點,當外層循環 i 取到 (2)(索引從 (0) 開始)時,內層循環 j 從 (i + 1 = 3) 開始,而總共有 (3) 個點,索引最大為 (2),內層循環不會執行。因此,square_count 始終為 (0),最終輸出 (0),符合 (3) 個點無法構成正方形的條件。

示例二(輸入 (4) 個點能構成 (1) 個正方形)

輸入:

4
0 0
1 2
3 1
2 -1

假設我們取點對 ((0,0)) 和 ((1,2)):

  • 計算第一組對角點:
    (x3 = 0 - (0 - 2) = 2),(y3 = 0 + (0 - 1) = -1),即 (p3 = (2,-1))
    (x4 = 1 - (0 - 2) = 3),(y4 = 2 + (0 - 1) = 1),即 (p4 = (3,1))
    檢查發現 (p3) 和 (p4) 都存在于坐標列表中,square_count 加 (1)。
  • 計算第二組對角點時(可能不符合條件,此處不詳細展開)。
    由于存在這樣一組符合條件的對角點,且經過其他點對計算(可能重復計算同一個正方形的不同邊),最終 square_count 會累加到 (4)(因為每個正方形被計算 (4) 次),除以 (4) 后輸出 (1)。

總結

此代碼通過巧妙利用幾何中向量旋轉的性質,避免了復雜的四重循環判斷所有四個點組合的方式,大大提高了計算效率。對于初學者來說,理解向量旋轉與坐標計算的關系是關鍵。通過 are_points_equalpoint_exists 函數實現了點的基本操作判斷,主邏輯部分通過遍歷點對并結合幾何計算來統計正方形數量。這種方法不僅在代碼實現上相對簡潔,而且在算法效率上也有較好的表現,適用于給定規模((N <= 100))的坐標輸入情況。通過對示例的分析,能更清晰地看到代碼如何根據輸入數據進行計算并得出正確結果,有助于深入理解整個算法流程。

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

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

相關文章

Qt:智能指針QScopedPointer使用

QScopedPointer和C中的智能指針std::unique_ptr其概念是一樣的&#xff0c;它包裝了new操作符在堆上分配的動態對象&#xff0c;能夠保證動態創建的對象在任何時候都可以被正確地刪除。但它有更嚴格的所有權&#xff0c;并且不能轉讓&#xff0c;一旦獲取了對象的管理權&#x…

TensorFlow基礎之理解計算圖

Tensor Flow TensorFlow 本章介紹TensorFlow的基礎。特別地&#xff0c;你將學習如何用TensorFlow進行基礎計算。在開始使用 TensorFlow之前,你必須理解它背后的哲學。 這個庫基于計算圖的概念&#xff0c;如果你不理解計算圖是如何工作的&#xff0c;你就不能理解如何使用這…

【HarmonyOS Next之旅】DevEco Studio使用指南(三十五) -> 配置構建(二)

目錄 1 -> 定制HAP多目標構建產物 1.1 -> 定義產物的HAP包名 1.2 -> 定義產物的deviceType 1.3 -> 定義產物的distributionFilter 1.4 -> 定義產物preloads的分包 1.5 -> 定義產物的source源碼集-pages 1.6 -> 定義產物的source源碼集-sourceRoots…

[muduo] ThreadPool | TcpClient | 異步任務 | 通信測試

第九章&#xff1a;線程池&#xff08;ThreadPool&#xff09; 在第八章《TcpServer》中&#xff0c;我們了解到muduo::net::TcpServer通過EventLoop線程池處理入站連接。 這些EventLoop線程主要負責網絡I/O&#xff1a;套接字讀寫和定時器處理&#xff0c;由Poller和Channel…

【筆記】解決部署國產AI Agent 開源項目 MiniMax-M1時 Hugging Face 模型下載報錯解決方案

MiniMax-AI/MiniMax-M1&#xff1a;MiniMax-M1&#xff0c;世界上第一個開放權重、大規模的混合注意力推理模型。 一、問題背景 【筆記】解決部署國產AI Agent 開源項目 MiniMax-M1時 Hugging Face 模型下載緩存占滿 C 盤問題&#xff1a;更改緩存位置全流程-CSDN博客 在執行hu…

新手如何利用AI助手Cursor生成復雜項目

新手如何利用AI助手Cursor生成復雜項目 在編程學習的道路上&#xff0c;AI工具正成為新手開發者的得力助手。本文將介紹如何借助Cursor這一強大的AI代碼助手&#xff0c;從零開始構建復雜項目。 一、基礎準備工作 作為編程新手&#xff0c;面對復雜項目時常常不知從何下手。利…

【Fargo】x264的intra refresh 3: 采集、編碼到 RTP打包

實際調試默認并么有打開b_intra_refresh D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-only\echo\codec\x264\echo_h264_encoder.cpp 即使打開了b_intra_refresh,也不影響RTP打包: 但是有一些要注意的地方: RFC 6184(“RTP Payload Format for H.264 Video”) intra …

Vue3 的生命周期:從 Composition API 視角看

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

面向互聯網大廠Java崗位面試:Spring Boot與微服務架構的深入探討

面向互聯網大廠Java崗位面試&#xff1a;Spring Boot與微服務架構的深入探討 問題1&#xff1a;什么是Spring Boot&#xff0c;它如何簡化Spring應用程序的開發&#xff1f; 簡潔回答&#xff1a; Spring Boot是一個基于Spring框架的開源Java平臺&#xff0c;旨在簡化新Sprin…

【信號與系統四】采樣和通信系統

在一定條件之下&#xff0c;一個連續時間信號完全可以用該信號在等時間間隔點上的值或樣本來表示&#xff0c;并且可以用這些樣本值把該信號全部恢復出來。這個稍微有點使人吃驚的性質來自于采樣定理。 例如一幀一幀的電影畫面&#xff0c;在我們大腦中構成連續的生活情節 接…

關于球面投影SphericalProjector的介紹以及代碼開發

球面投影的幾何背景 什么是球面投影&#xff1f; 球面投影將 2D 圖像中的像素點&#xff08;通常是平面&#xff09;映射到一個虛擬的球面上&#xff0c;再將球面上的角度&#xff08;經度、緯度&#xff09;展開到平面圖上。它是廣角圖像拼接、全景圖生成中常用的投影方法。…

wordpress外貿獨立站常用留言表單插件 contact form 7

Contact Form 7 介紹 Contact Form 7 是一款非常流行的 WordPress 聯系表單插件&#xff0c;廣泛應用于外貿獨立站。以下是其主要特點&#xff1a; 功能強大且免費&#xff1a;Contact Form 7 是完全免費的&#xff0c;支持創建和管理多個聯系表單。 簡單易用&#xff1a;用…

佰力博科技與您探討油浴極化的優點及工藝流程

一、油浴極化的優點 溫度范圍寬&#xff1a;油浴極化適用于較寬的溫度范圍&#xff0c;適合不同材料的極化需求。 絕緣強度高&#xff1a;油浴介質具有良好的絕緣性能&#xff0c;能夠承受較高的極化電場。 防潮性好&#xff1a;油浴極化在潮濕環境中仍能保持良好的絕緣性能。 …

從0開始學習R語言--Day28--高維回歸

我們一般處理的數據&#xff0c;都是樣本數量遠大于其特征數量&#xff0c;可用很多種回歸方法&#xff1b;但當特征數量遠大于樣本量時&#xff0c;可能會因為出現無數多個完美解導致過擬合現象&#xff0c;也使得在計算時搜索最有特征子集的方法不再可行&#xff08;因為計算…

響應式數據的判斷:Vue3中的方法

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

[論文閱讀] 人工智能+軟件工程 | 用大語言模型架起軟件需求形式化的橋梁

用大語言模型架起軟件需求形式化的橋梁&#xff1a;一篇ACM調查草案的深度解讀 論文信息 arXiv:2506.14627 ACM Survey Draft on Formalising Software Requirements with Large Language Models Arshad Beg, Diarmuid O’Donoghue, Rosemary Monahan Comments: 22 pages. 6 s…

DM8故障分析工具-AWR報告

在數據庫運維過程中&#xff0c;大家都會利用數據庫提供的各種工具來找到數據庫存在的問題&#xff0c;以便對癥實施配置優化&#xff0c;我是因工作需要&#xff0c;最近開始了解達夢數據庫DM8的故障分析工具&#xff0c;這里發現AWR報告是一款不錯的自帶工具&#xff0c;故而…

《企業司法風險監控系統架構設計:從數據采集到T+1實時預警的完整解決方案》

本文深入探討了天遠大數據在構建企業級司法風險監控平臺和風險報告查詢系統方面的技術實現與業務應用。平臺依托權威、合法的司法數據源&#xff0c;通過實時數據處理與智能分析&#xff0c;為金融、供應鏈、人力資源等領域提供精準、及時的司法預警和決策支持。它通過靈活的多…

使用ccs生成bin

CCS12.6 編譯生成BIN文件正確方法_ccs生成bin文件-CSDN博客

Kafka網絡模塊全鏈路源碼深度剖析與設計哲學解讀

在分布式消息系統的競技場上&#xff0c;Kafka憑借卓越的高性能與高吞吐量脫穎而出&#xff0c;而其網絡模塊正是支撐這一卓越表現的核心引擎。從生產者將消息送入消息隊列&#xff0c;到消費者從中拉取消息&#xff0c;Kafka網絡模塊貫穿消息流轉的每個環節。本文不僅深入Kafk…