腾讯2025年校招笔试真题手撕(二)

一、题目

最近以比特币为代表的数字货币市场非常动荡,聪明的小明打算用马尔科夫链来建模股市。如图所示,该模型有三种状态:“行情稳定”,“行情大跌”以及“行情大涨”。每一个状态都以一定的概率转化到下一个状态。比如,“行情稳定”以0.4的概率转化到“行情大跌”的状态。

有了概率转移矩阵P,我们只要知道一个初始状态 ,我们就容易可以知道第 t 步三种状态的概率了。由此可以知道行情什么时候大涨大跌,从而发家致富,赢取白富美,走向人生巅峰。比如我们想知道第1步之后“行情大跌”的概率,那么由全概率公式和马尔科夫链的性质(第t步的概率只和第t-1步有关):

可以通过该模型,计算出第t步的“行情大涨”的概率吗?如果这个概率大于0.5那么输出1,否则输出0。

输入描述 第1行输入为测试数据组数T(1<=T<1000),接下来T组每5行的数据格式为 T组第1行是步长1<=t<=10。 T组第2行是一个3维的初始状态 T组第3行到第5行是3*3的概率转移矩阵P,每行有三个浮点数

输出描述 如果第t步的“行情大涨”概率大于0.5那么输出1,否则输出0

二、分析

该问题着重于预测数字货币市场行情在未来特定时间步处于“行情大涨”状态的可能性,以此辅助决策。题目要求利用马尔科夫链这一数学工具,基于给定的初始状态和转移概率矩阵,计算第 t 步时“行情大涨”状态发生的概率是否超过 0.5。马尔科夫链的核心特性在于无记忆性,即第 t 步的状态仅依赖于第 t-1 步的状态,这使得我们能够通过逐步迭代的方式,依据转移概率矩阵预测未来的状态分布。

具体到本题,每组测试数据包括初始状态向量和转移概率矩阵。初始状态向量的三个分量分别代表“行情稳定”“行情大跌”和“行情大涨”三种状态的初始概率。转移概率矩阵是一个 3×3 的矩阵,其中每个元素 P[i][j] 表示从状态 i 转移到状态 j 的概率。为了计算第 t 步的状态概率分布,我们需要从初始状态出发,连续应用 t-1 次转移概率矩阵。这可以通过矩阵乘法的方式实现:每一步,我们都用当前状态概率分布与转移概率矩阵相乘,得到下一步的状态概率分布。

在算法实现上,针对每组测试数据,首先读取步长 t、初始状态向量以及转移概率矩阵。然后,从初始状态开始,进行 t-1 次状态转移计算。在每一次转移中,我们都根据转移概率矩阵更新各状态的概率。具体来说,对于每个可能的起始状态,我们将该状态的概率分配到下一个状态,分配的比例由转移概率决定。经过 t-1 次这样的转移后,我们得到第 t 步的状态概率分布。此时,只需检查“行情大涨”状态的概率是否超过 0.5,即可决定输出 1 或 0。

三、代码

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()
  1. 输入读取与解析

    • 读取输入的所有数据,并将其存储在一个列表中。

    • 使用指针 ptr 来逐个访问输入数据。

    • 第一个输入是测试数据组数 T

  2. 每组数据处理

    • 对于每组数据,首先读取步长 t

    • 接着读取初始状态向量 state,该向量包含三个元素,分别表示初始时刻处于“行情稳定”、“行情大跌”和“行情大涨”三种状态的概率。

    • 然后读取 3×3 的转移概率矩阵 P,其中每个元素 P[i][j] 表示从状态 i 转移到状态 j 的概率。

  3. 状态转移计算

    • 初始化当前状态为初始状态向量 current_state

    • 对于从第 1 步到第 t-1 步的每一步,计算下一步的状态概率分布:

      • 创建一个新的状态向量 new_state,初始化为全 0。

      • 对于每个状态 j,计算当前状态转移到状态 j 的总概率,并累加到 new_state[j] 中。

    • 将当前状态更新为新计算的状态 new_state

  4. 输出结果

    • 在完成 t-1 次转移后,检查当前状态中“行情大涨”(对应索引 2)的概率是否大于 0.5。

    • 如果大于 0.5,则输出 1;否则输出 0。

这个代码实现了对每组测试数据的输入解析、状态转移的迭代计算以及最终结果的判断和输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为2025年校招笔试真题手撕教程(一)

一、题目 输入&#xff1a; 第一行为记录的版本迭代关系个数N&#xff0c;范围是[1&#xff0c;100000]; 第二行到第N1行&#xff1a;每行包含两个字符串&#xff0c;第一个字符串为当前版本&#xff0c;第二个字符串为前序版本&#xff0c;用空格隔开。字符串包含字符个数为…

腾讯2025年校招笔试真题手撕(一)

一、题目 有n 把钥匙&#xff0c;m 个锁&#xff0c;每把锁只能由一把特定的钥匙打开&#xff0c;其他钥匙都无法打开。一把钥匙可能可以打开多把锁&#xff0c;钥匙也可以重复使用。 对于任意一把锁来说&#xff0c;打开它的钥匙是哪一把是等概率的。但你无法事先知道是哪一把…

mysql都有哪些锁?

MySQL中的锁机制是确保数据库并发操作正确性和一致性的重要组成部分&#xff0c;根据锁的粒度、用途和特性&#xff0c;可以分为多种类型。以下是MySQL中常见的锁及其详细说明&#xff1a; 一、按锁的粒度划分 行级锁&#xff08;Row-level Locks&#xff09; 描述&#xff1a;…

JVM——JNI 的运行机制

引入 在 Java 开发中&#xff0c;我们常常会遇到一些 Java 语言难以直接处理的场景&#xff0c;例如需要调用特定体系架构或操作系统的功能&#xff0c;或者利用汇编语言的 SIMD 指令来优化关键代码性能。这时&#xff0c;Java Native Interface&#xff08;JNI&#xff09;就…

Oracle中的[行转列]与[列转行]

目录 一、原始数据 二、行转列的多种实现方式 1.CASE WHEN 2.DECODE 3.PIVOT(Oracle独有) 4.使用LEAD开窗函数 三、列转行的多种实现方式 1.UNPIVOT(Oracle独有) 2.UNION ALL合并结果集 四、行转列练习&#xff1a;CASE WHEN/DECODE/PIVOT/lag/LEAD 1.CASE WHEN 2…

MyBatis实战指南(二)如何实现小鸟图标与导入Teacher数据库表实战

MyBatis实战指南&#xff08;二&#xff09;如何实现小鸟图标与导入Teacher数据库表实战 前言一、如何实现小鸟图标二、导入Teacher数据库表实战步骤一&#xff1a;在pojo文件下创建Teacher类步骤二&#xff1a;在mapper下创建TeacherMapper接口步骤三&#xff1a;在rescources…

互联网大厂Java求职面试实录 —— 严肃面试官遇到搞笑水货程序员

互联网大厂Java求职面试实录 —— 严肃面试官遇到搞笑水货程序员 本文以真实场景还原的互联网大厂Java面试故事&#xff0c;严肃的面试官与搞笑的水货程序员谢飞机的对话形式&#xff0c;涵盖核心Java、JUC、多线程、线程池、SpringBoot、MyBatis、Dubbo、RabbitMQ、xxl-job、…

JWT笔记

目录 1.JWT简介2.JWT作用3.传统Session4.JWT的结构5.JWT的请求流程 6.SpringBoot集成JWT 1.JWT简介 JWT&#xff08;JSON web token&#xff09;&#xff0c;也就是通过JSON形式作为Web应用中的令牌&#xff0c;用于在各方之间安全地将信息作为JSON对象传输&#xff0c;在数据传…

Docker 镜像调试最佳实践

当你已经构建了一个 Docker 镜像&#xff0c;但运行它的容器启动后立即退出&#xff08;通常是因为服务异常或配置错误&#xff09;&#xff0c;你仍然可以通过以下几种方式进入镜像内部进行调试。 ✅ 最佳实践&#xff1a;如何对一个“启动即退出”的镜像进行命令行调试&#…

TypeScript小技巧使用as const:让类型推断更精准。

文章目录 前言什么是 as const&#xff1f;为什么需要 as const&#xff1f;as const的使用场景1. 保留字面量类型2. 处理元组类型3. 函数调用中的类型匹配 实际应用示例示例 1&#xff1a;配置对象示例 2&#xff1a;枚举替代方案 总结 前言 作为一名前端开发者&#xff0c;在…

LangGraph-agent-天气助手

用于创建agent和多代理工作流 循环&#xff08;有迭代次数&#xff09;、可控、持久 安装langgraph包 conda create --name agent python3.12 conda activate agent pip install -U langgraph pip install langchain-openai设置 windows&#xff08;>结尾&#xff09; s…

十三种通信接口芯片——《器件手册--通信接口芯片》

目录 通信接口芯片 简述 基本功能 常见类型 应用场景 详尽阐述 1 RS485/RS422芯片 1. RS485和RS422标准 2. 芯片功能 3. 典型芯片及特点 4. 应用场景 5. 设计注意事项 6. 选型建议 2 RS232芯片 1. RS232标准 2. 芯片功能 3. 典型芯片及特点 4. 应用场景 5. 设计注意事项 6…