腾讯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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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常用开…