【Complete Search】-基礎完全搜索-Basic Complete Search

文章目錄

  • Solution - Maximum Distance

涉及遍歷整個解空間的問題

資料-resources

6 - Complete Search

在很多問題中(尤其是在 USACO Bronze 級別),只需檢查解空間中的所有可能情況就足夠了,比如所有元素、所有元素對、所有子集,或者所有排列。

毫不奇怪,這種方法被稱為完全搜索(complete search)或暴力搜索(brute force),因為它會徹底遍歷整個解空間。

問題-problem

Maximum Distance

Solution - Maximum Distance

我們可以遍歷每一對點,并通過對歐幾里得距離公式平方來計算它們之間的距離平方:

distance2[(x1,y1),(x2,y2)]=(x2?x1)2+(y2?y1)2\text{distance}^2\left[(x_1,y_1),(x_2,y_2)\right] = (x_2 - x_1)^2 + (y_2 - y_1)^2 distance2[(x1?,y1?),(x2?,y2?)]=(x2??x1?)2+(y2??y1?)2

將當前的最大距離平方值保存在變量 max_squared 中。

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;vector<int> x(n), y(n);for (int &t : x) { cin >> t; }for (int &t : y) { cin >> t; }int max_squared = 0;                   // 存儲當前最大距離平方for (int i = 0; i < n; i++) {          // 遍歷每個第一個點for (int j = i + 1; j < n; j++) {  // 遍歷每個第二個點(避免重復和自比較)int dx = x[i] - x[j];int dy = y[i] - y[j];int square = dx * dx + dy * dy;/** 如果兩點距離的平方大于當前最大值,則更新最大值*/max_squared = max(max_squared, square);}}cout << max_squared << endl;
}

由于我們要遍歷所有點對,因此讓內層循環從 j=i+1j=i+1j=i+1 開始,確保點 iii 和點 jjj 永遠不會是同一個點。另外,這樣還能保證每一對點只被計算一次。

在這道題中,即使重復計算點對或允許 i=ji=ji=j 也不會影響最終結果(求最大距離),但在其他需要計數的問題中,避免重復計數非常重要。

題目要求輸出的是任意兩點之間最大歐幾里得距離的平方。

有些同學可能想先用整數變量存儲最大距離,然后最后再對結果進行平方。

但這里的問題是,兩個整數點之間的距離平方一定是整數,但距離本身不一定是整數(可能是無理數或小數)。因此,如果先存儲距離(非整數)到整數變量,會導致小數部分被截斷,造成錯誤。

下面的解決方案使用浮點型變量來正確存儲最大距離。

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;vector<int> x(n), y(n);for (int &t : x) { cin >> t; }for (int &t : y) { cin >> t; }double max_dist = 0;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {int dx = x[i] - x[j];int dy = y[i] - y[j];int square = dx * dx + dy * dy;max_dist = max(max_dist, sqrt(square));}}cout << (int)pow(max_dist, 2) << endl;
}

但是,這段代碼在以下測試用例上仍然會失敗(它輸出了 121212,而正確答案是 131313):

2
0 3
2 0

原因是浮點數計算的舍入誤差導致的。雖然使用 (int) round(pow(max_dist, 2)) 進行四舍五入可以解決這個問題,但最重要的結論是:盡可能使用整數計算,避免浮點數誤差。

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

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

相關文章

神經網絡的層與塊

什么是層&#xff1f;什么是塊&#xff1f;在深度學習中&#xff0c;層&#xff08;Layer&#xff09; 和塊&#xff08;Block&#xff09; 是構建神經網絡的核心概念&#xff0c;尤其在 PyTorch、TensorFlow 等框架中&#xff0c;二者既緊密關聯又有明確分工。理解它們的定義、…

如何用Qt寫一個安卓Android應用

對于不會安卓開發的同胞來講(比如我)&#xff0c;想要做一個安卓應用(.apk)使用Qt是一個不錯的方法&#xff0c;今天就來聊聊如何使用Qt結合C寫一個安卓應用。 首先我們得擁有一個Qt,我使用的是5.14.2版本的&#xff0c;新版本可直接到qt官網去下載qt.io,老版本的現在qt官網不支…

泰語OCR識別技術方案

一、痛點分析1.1 泰語文字特性帶來的挑戰復雜字符集&#xff1a;泰語有44個輔音字母、15個元音符號、4個聲調符號和10個數字&#xff0c;組合形式多樣上下疊加結構&#xff1a;泰文字符常在垂直方向疊加組合&#xff0c;增加分割難度無詞間空格&#xff1a;泰語單詞間無明確分隔…

MER-Factory:多模態情感識別與推理數據集自動化工廠工具介紹

&#x1f6e0;? 工具 如果這個項目對你有幫助&#xff0c;歡迎給 https://github.com/Lum1104/MER-Factory/ 倉庫點一個 Star &#x1f31f; &#xff0c;這對我們幫助很大 MER-Factory 提供交互式工具來幫助您管理數據和配置處理流水線。 調優儀表板 調優儀表板 是一個基…

Python基礎數據結構詳解:字符串、列表、元組和字典的常用方法

目錄 一、引言&#xff1a;為什么學習這些數據結構&#xff1f; 二、字符串&#xff08;String&#xff09;的常用方法 1. 基本操作 2. 查找索引 3. 大小寫轉換 4. 位置調整 5. 開頭和結尾檢查 6. 分割和連接 7. 刪除空白字符 8. 類型判定 9. 替換內容 字符串小結 …

Liunx練習項目5.1-周期化任務;時間同步服務;

1.系統周期化任務1.1 at命令的用法at 時間 指定在規定的時間上執行相應的操作&#xff0c;完成操作crtlD完成編輯一分鐘后輸入的指令完成&#xff0c;創建了file{1..5}的文件at -l 查看系統上面所有用戶的調度at -c 可以查看該任務的指令at -d 加編號可以刪除該任務at -v 可以…

小皮面板搭建pikachu靶場

一、搭建所需的工具 1.下載小皮面板 下載地址為&#xff1a;小皮面板(phpstudy) - 讓天下沒有難配的服務器環境&#xff01; 2.下載靶場所需的文件 下載地址為&#xff1a;https://github.com/zhuifengshaonianhanlu/pikachu 二、環境的搭建 打開小皮面板&#xff0c;使用所…

使用aiohttp實現高并發爬蟲

使用aiohttp來編寫一個高并發的爬蟲&#xff0c;想法很不錯&#xff0c;現實很骨感。這里我們要知道&#xff0c;由于高并發可能會對目標服務器造成壓力&#xff0c;請確保遵守目標網站的robots.txt&#xff0c;并合理設置并發量&#xff0c;避免被封IP。 我將通過示例代碼&…

【Linux庖丁解牛】— 信號量ipc管理!

1. 并發編程概念鋪墊> 多個執行流【進程】看到同一份資源&#xff1a;共享資源。> 被保護起來的資源叫做臨界資源。> 在進程中&#xff0c;涉及臨界資源的程序段叫做臨界區。【說人話就是程序中訪問共享資源的代碼】> 什么是互斥&#xff1a;任何時刻&#xff0c;只…

Spring Boot全局異常處理詳解

原代碼&#xff1a;package com.weiyu.exception;import com.weiyu.pojo.Result; import com.weiyu.utils.ErrorFileResponseUtils; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import …

FHE技術將徹底改變在線隱私保護方式

1. 在線隱私的簡史 互聯網剛剛誕生時&#xff0c;所有的內容都是未加密的。人們通過一個特定的地址訪問網站&#xff0c;這個地址以“HTTP”開頭。當時&#xff0c;這并不是什么大問題&#xff0c;因為人們在線訪問的都是內容&#xff0c;而這些內容本身已經是公開的。但隨著電…

Cursor配置Java環境、創建Spring Boot項目

一&#xff1a;配置JDK和Maven cursor默認會讀取環境變量JAVA_HOME和MAVEN_HOME&#xff0c;如果沒有配置去找默認路徑~/.m2/settings.xml也可以手動指定&#xff1a;Ctrl Shift P 輸入"Preferences:Open User Settings(JSON)"打開settings.json文件&#xff0c;然…

win11添加無線顯示器(兩個筆記本實現雙屏)

前置條件&#xff1a; 兩個筆記本要要支持無線顯示器&#xff0c;支持藍牙&#xff1b; 1、自己重裝的win11系統&#xff0c;首先根據網上說明進去的時候&#xff0c;紅色顯示無無線投屏&#xff1b; 2、安裝網上操作&#xff0c;查看自己電腦是否支持無線投屏&#xff08;是支…

【MAC技巧】Bash/Zsh切換失敗的故障排除

【MAC技巧】Bash/Zsh切換失敗的故障排除 Troubleshooting to Failure " chsh: no changes made" By JacksonML 在Mac電腦中&#xff0c;終端(Terminal)是常用的命令行工具&#xff0c;對開發和運維至關重要。 依照蘋果電腦的系統軟件迭代&#xff0c;終端中存有B…

卷積神經網絡-卷積的分類

卷積的定義卷積是圖像處理中最核心的操作之一&#xff0c;其本質是通過卷積核&#xff08;濾波器&#xff09;與圖像進行滑動窗口計算&#xff08;像素值乘積之和&#xff09;&#xff0c;實現對圖像特征的提取、增強或抑制。一、二維卷積--針對二維矩陣進行處理1.1單通道見得最…

全網首發:使用GIT下載時崩潰退出,是因為機械硬盤

前面有幾篇文章&#xff0c;說是GIT下載會退出。開始以為是虛擬機問題。把家里的虛擬機復制到公司&#xff0c;照樣崩潰。后來認為是內存不足。昨天在家里下載代碼&#xff0c;也崩潰退出。心里覺得奇怪&#xff0c;試了一次&#xff0c;還是退出。差別在哪里&#xff1f;之前是…

YAML 自動化用例中 GET vs POST 請求的參數寫法差異

GET 請求&#xff1a;用 params 傳參&#xff08;附加在 URL 上&#xff09; config:name: "GET 查詢用戶信息"base_url: "https://api.example.com"teststeps:- name: "根據 userId 查詢用戶信息"request:method: GETurl: /api/user/detailpara…

使用 SeaTunnel 建立從 MySQL 到 Databend 的數據同步管道

SeaTunnel 是一個非常易用、超高性能的分布式數據集成平臺&#xff0c;支持實時海量數據同步。 每天可穩定高效地同步數百億數據&#xff0c;已被近百家企業應用于生產&#xff0c;在國內較為普及。 Databend 是一款開源、彈性、低成本&#xff0c;基于對象存儲也可以做實時分…

linux服務器換ip后客戶端無法從服務器下載數據到本地問題處理

服務器換ip后客戶端無法從服務器下載數據到本地&#xff0c;根據上圖提示&#xff0c;讓用戶清理下~/.ssh/known_hosts文件&#xff0c;下載恢復正常。

從0到1實現Shell!Linux進程程序替換詳解

目錄從0到1實現Shell&#xff01;Linux進程程序替換詳解 &#x1f680;引言&#xff1a;為什么進程需要"變身術"&#xff1f;一、程序替換&#xff1a;進程的"換衣服"魔法 &#x1f504;1.1 什么是程序替換&#xff1f;1.2 程序替換的原理&#xff1a;內存…