騰訊2025年校招筆試真題手撕(一)

一、題目

有n 把鑰匙,m 個鎖,每把鎖只能由一把特定的鑰匙打開,其他鑰匙都無法打開。一把鑰匙可能可以打開多把鎖,鑰匙也可以重復使用。 對于任意一把鎖來說,打開它的鑰匙是哪一把是等概率的。但你無法事先知道是哪一把鑰匙,只能進行嘗試。 已知每次嘗試用第i把鑰匙打開第j把鎖會消耗的時間a ij 秒。 問最優策略下打開所有鎖的總期望時間是多少秒。

輸入描述?第一行兩個以空格分隔的正整數n,m。 接下來m行每行m個空格分隔的正整數aij。 1<=n,m,aij <=500

輸出描述?輸出一個小數代表答案,你的答案會被認為是正確的當且僅當你的答案與正確答案的絕對誤差或相對誤差不超過10-6。

二、分析

這個問題涉及到尋找一種最優策略以最小化在平均情況下打開所有鎖所需的總時間。具體來說,我們有n把鑰匙和m個鎖,每把鎖由且僅由一把特定的鑰匙打開,但每把鑰匙可能用于打開多把鎖。我們無法事先知道哪把鑰匙能打開哪把鎖,只能通過嘗試來確定。每次嘗試用鑰匙i打開鎖j會消耗時間a_ij秒。我們的目標是在最優策略下計算打開所有鎖的總期望時間。這個問題可以通過為每個鎖單獨尋找最優的鑰匙嘗試順序來解決。由于每個鎖的正確鑰匙是等概率分布的,每個鎖的處理可以獨立進行。對于每個鎖來說,最優的策略是按鑰匙的嘗試時間從小到大進行排序,這樣的順序能最小化期望時間。

對于每個鎖,正確鑰匙的位置是均勻分布的,因此期望時間可以通過加權和來計算,其中每個鑰匙的權重是其在嘗試順序中的位置。具體來說,對于每個鎖j,我們對鑰匙按a_ij從小到大排序,然后計算排序后的加權和,其中第i小的鑰匙的權重為n-i+1(即從n到1遞減)。總期望時間是所有鎖的加權和的平均值,即所有鎖的加權和相加后除以n。首先讀取輸入的n和m,然后讀取每個鎖對應的n個嘗試時間。對于每個鎖,對嘗試時間進行排序,然后計算加權和。最后,將所有鎖的加權和相加,并除以n得到總期望時間。代碼實現中,我們首先讀取輸入數據,然后對每個鎖的嘗試時間進行排序,計算每個鎖的加權和,最后累加所有鎖的加權和并除以n得到結果。這個方法有效地利用了貪心策略,確保每個鎖的處理都是最優的,從而使得總期望時間最小化。

具體來說,對于每把鎖j,將它的n個嘗試時間a_ij進行升序排序。然后計算排序后的加權和,即第i小的時間乘以權重(n-i+1),并將所有鎖的加權和累加起來,最后除以n得到總期望時間。這種方法確保了每個鎖的處理都是最優的,從而整體上最小化了期望時間。

三、代碼

算法步驟

  1. 輸入處理:讀取n(鑰匙數)和m(鎖數),以及每個鎖對應的n個嘗試時間。

  2. 排序:對每個鎖的嘗試時間進行升序排序。

  3. 加權和計算:對排序后的每個鎖,計算加權和,其中權重從n到1遞減。

  4. 總期望時間:將所有鎖的加權和相加后除以n,得到總期望時間。

def main():import sysinput = sys.stdin.read().split()ptr = 0T = int(input[ptr])ptr += 1for _ in range(T):t = int(input[ptr])ptr += 1state = list(map(float, input[ptr:ptr+3]))ptr += 3P = []for i in range(3):row = list(map(float, input[ptr:ptr+3]))P.append(row)ptr += 3current_state = state.copy()for _ in range(t-1):new_state = [0.0]*3for j in range(3):for k in range(3):new_state[j] += current_state[k] * P[k][j]current_state = new_stateif current_state[2] > 0.5:print(1)else:print(0)if __name__ == "__main__":main()
  • 輸入處理:讀取鑰匙數n和鎖數m,以及每個鎖對應的n個嘗試時間。排序:對每個鎖的嘗試時間進行排序,確保較小的時間排在前面。加權和計算:每個鑰匙的嘗試時間乘以其權重(從n到1),累加得到該鎖的總加權和。總期望時間:所有鎖的加權和相加后除以n,得到最優策略下的總期望時間。

通過這種方法,我們確保每個鎖的處理都是最優的,從而最小化總期望時間。

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

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

相關文章

【北郵通信系統建模與仿真simulink筆記】(2)2.3搭建仿真模型模塊操作運行仿真

【聲明】 本博客僅用于記錄博主學習內容、分享筆記經驗&#xff0c;不得用作其他非學術、非正規用途&#xff0c;不得商用。本聲明對本博客永久生效&#xff0c;若違反聲明所導致的一切后果&#xff0c;本博客均不負責。 目錄 【聲明】 一、搭建第一個仿真模型 二、模塊操作…

系統與賬戶安全

SYS-01&#xff1a;Windows的賬戶安全 安全配置核心原則&#xff1a; 強密碼策略&#xff1a; 通過組策略設置密碼復雜度&#xff1a; # 啟用密碼復雜度要求 secedit /export /cfg secpolicy.inf # 修改文件中的 "PasswordComplexity 1" secedit /configure /db …

COMPUTEX 2025 | 廣和通5G AI MiFi解決方案助力移動寬帶終端邁向AI新未來

隨著5G與AI不斷融合&#xff0c;穩定高速、智能的移動網絡已成為商務、旅行、戶外作業等場景的剛需。廣和通5G AI MiFi方案憑借領先技術與創新設計&#xff0c;重新定義5G移動網絡體驗。 廣和通5G AI MiFi 方案搭載高通 4nm制程QCM4490平臺&#xff0c;融合手機級超低功耗技術…

免費開放試乘體驗!蘇州金龍自動駕駛巴士即將上線陽澄數谷

近日&#xff0c;蘇州自動駕駛巴士線路——陽澄數谷示范線正式上線&#xff0c;即日起向全民免費開放試乘體驗&#xff01; 在蘇州工業園區地鐵3號線倪浜?陽澄數谷站外&#xff0c;一輛輛黑、白配色的小巴正在道路上有條不紊地行駛。與普通公交不同的是&#xff0c;小巴造型奇…

嵌入式軟件架構規范之 - 分層設計

一、規范的核心思想&#xff1a;驅動文件的“獨立性”與“復用性” 該規范的本質是通過分層隔離&#xff0c;實現驅動代碼的高復用性、低耦合性&#xff0c;確保驅動模塊僅關注“硬件操作邏輯”&#xff0c;不依賴上層業務或下層硬件接口的具體實現細節。其核心要求包括&#…

PyQt5繪圖全攻略:QPainter、QPen、QBrush與QPixmap詳解

摘要&#xff1a;掌握PyQt5繪圖核心控件&#xff0c;輕松實現窗體繪圖、文字渲染、幾何圖形繪制及圖像加載。本文附帶完整代碼示例與效果圖&#xff0c;助你快速上手GUI圖形開發。 繪圖基礎&#xff1a;為什么需要這些控件&#xff1f; 在GUI開發中&#xff0c;繪圖功能是數據…

C++學習:六個月從基礎到就業——多線程編程:std::thread基礎

C學習&#xff1a;六個月從基礎到就業——多線程編程&#xff1a;std::thread基礎 本文是我C學習之旅系列的第五十四篇技術文章&#xff0c;也是第四階段"并發與高級主題"的第一篇&#xff0c;介紹C11引入的多線程編程基礎知識。查看完整系列目錄了解更多內容。 引言…

【計算機網絡】TCP如何保障傳輸可靠性_筆記

文章目錄 一、傳輸可靠性的6方面保障二、分段機制三、超時重傳機制四、流量控制五、擁塞控制 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 源網站 按TCP/IP 4層體系&#xff0c;TCP位于傳輸層&#xff0c;為應用層提供服務 一、傳輸可靠性的6方面保障…

2025年保姆級教程:Powershell命令補全、主題美化、文件夾美化及Git擴展

文章目錄 1. 美化 Powershell 緣起2. 安裝 oh-my-posh 和 posh-git3. 安裝文件夾美化主題【可選】 1. 美化 Powershell 緣起 背景&#xff1a;用了 N 年的 Windows 系統突然覺得命令行實在太難用了&#xff0c;沒有補全功能、界面也不美觀。所以&#xff0c;我決定改變它。但是…

基于Mongodb的分布式文件存儲實現

分布式文件存儲的方案有很多&#xff0c;今天分享一個基于mongodb數據庫來實現文件的存儲&#xff0c;mongodb支持分布式部署&#xff0c;以此來實現文件的分布式存儲。 基于 MongoDB GridFS 的分布式文件存儲實現&#xff1a;從原理到實戰 一、引言 當系統存在大量的圖片、…

【Linux】Linux安裝并配置Redis

目錄 1.安裝 2.啟動服務 3.配置 3.1.綁定地址 3.2.保護模式 3.3.持久化選項 3.3.1.RDB 持久化 3.3.2.AOF 持久化 3.3.3.如何選擇 1.安裝 Redis 可以從默認的 CentOS 軟件倉庫中安裝。運行以下命令來安裝 Redis sudo dnf install redis -y 響應如下 2.啟動服務 安裝完成后&…

python-數據可視化(大數據、數據分析、可視化圖像、HTML頁面)

通過 Python 讀取 XLS 、CSV文件中的數據&#xff0c;對數據進行處理&#xff0c;然后生成包含柱狀圖、扇形圖和折線圖的 HTML 報告。這個方案使用了 pandas 處理數據&#xff0c;matplotlib 生成圖表&#xff0c;并將圖表嵌入到 HTML 頁面中。 1.XSL文件生成可視化圖像、生成h…

黑馬點評相關知識總結

黑馬點評的項目總結 主要就黑馬點評項目里面的一些比較重要部分的一次總結&#xff0c;方便以后做復習。 基于Session實現短信登錄 短信驗證碼登錄 這部分使用常規的session來存儲用戶的登錄狀態&#xff0c;其中短信發送采取邏輯形式&#xff0c;并不配置云服務驗證碼功能。…

手搓四人麻將程序

一、麻將牌的表示 在麻將游戲中&#xff0c;總共有一百四十四張牌&#xff0c;這些牌被分為多個類別&#xff0c;每個類別又包含了不同的牌型。具體來說&#xff0c;麻將牌主要包括序數牌、字牌和花牌三大類。序數牌中&#xff0c;包含有萬子、條子和筒子&#xff0c;每種花色…

【Java高階面經:數據庫篇】17、分庫分表分頁查詢優化:告別慢查詢與內存爆炸

一、分庫分表基礎&#xff1a;策略與中間件形態 1.1 分庫分表核心策略 分庫分表是應對海量數據存儲和高并發訪問的關鍵架構設計&#xff0c;其核心在于將數據分散到不同的數據庫或表中&#xff0c;以突破單庫單表的性能限制。常見的分庫分表策略包括&#xff1a; 1.1.1 哈希…

貪心算法之跳躍游戲問題

問題背景 本文背景是leetcode的一道經典題目&#xff1a;跳躍游戲&#xff0c;描述如下&#xff1a; 給定一個非負整數數組 nums&#xff0c;初始位于數組的第一個位置&#xff08;下標0&#xff09;。數組中的每個元素表示在該位置可以跳躍的最大長度。判斷是否能夠到達最后…

Label Studio:開源標注神器

目錄 一、Label Studio 是什么&#xff1f; 二、核心功能大揭秘 2.1 多類型數據全兼容 2.2 個性化定制隨心配 2.3 團隊協作超給力 2.4 機器學習巧集成 三、上手實操超簡單 3.1 安裝部署不頭疼 3.1.1 Docker安裝 3.1.2 pip安裝 3.1.3 Anaconda安裝 3.2 快速開啟標注…

創建信任所有證書的HttpClient:Java 實現 HTTPS 接口調用,等效于curl -k

在 Java 生態中&#xff0c;HttpClient 和 Feign 都是調用第三方接口的常用工具&#xff0c;但它們的定位、設計理念和使用場景有顯著差異。以下是詳細對比&#xff1a; DIFF1. 定位與抽象層級 特性HttpClientFeign層級底層 HTTP 客戶端庫&#xff08;處理原始請求/響應&#…

從零基礎到最佳實踐:Vue.js 系列(7/10):《常用內置 API 與插件》

引言 Vue.js 是一款輕量且強大的前端框架&#xff0c;因其易用性和靈活性受到廣泛歡迎。無論是初學者還是資深開發者&#xff0c;都可以通過其內置 API 和插件生態快速構建高效、可維護的 Web 應用。本文將從基礎用法講起&#xff0c;逐步深入到進階技巧&#xff0c;結合大量實…

線性代數:AI大模型的數學基石

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