Kimi LeetCode LCP 27. 黑盒光线反射 Python3实现

发布时间:2026/8/25 14:25:19

Kimi    LeetCode LCP 27. 黑盒光线反射 Python3实现
这是 LeetCode LCP 27. 黑盒光线反射 的 Python3 实现。解题思路核心思想是预处理所有光线循环 有序集合维护1. 状态定义每个状态由 (小孔序号, 方向) 组成。方向 1 表示沿 yx-1 表示沿 y-x。2. 预处理循环利用数学公式直接计算光线到达的下一个小孔无需模拟坐标。所有状态恰好被划分成若干个互不相交的循环。3. 有序集合每个循环维护一个有序列表记录该循环中已打开的小孔位置。open 时插入close 时删除。4. 查询光线从某个状态出发沿循环顺序找下一个已打开的小孔严格在循环顺序之后若找不到则循环到该集合的第一个。状态转移公式- 方向 1yx从第 i 个小孔射出 → 到达第 2(mn)-i 个小孔- 方向 -1y-x- 若 i ≤ 2m → 到达第 2m-i 个小孔- 若 i 2m → 到达第 2(2mn)-i 个小孔- 经过非角点小孔后方向翻转经过角点0, m, mn, 2mn方向不变。---Python3 代码pythonimport bisectclass BlackBox:def __init__(self, n: int, m: int):self.n nself.m mself.pt_count 2 * (n m)# groupPos[i] (group_id, location_in_group) 对应方向 1 (yx)# groupNeg[i] (group_id, location_in_group) 对应方向 -1 (y-x)# 角上的小孔只有一个有效方向另一个保持 (-1, -1)self.groupPos [(-1, -1)] * self.pt_countself.groupNeg [(-1, -1)] * self.pt_count# 每个循环对应一个有序列表元素为 (location, index)self.groupStats []for i in range(self.pt_count):# 方向 1跳过角点 0 和 mnif i ! 0 and i ! m n and self.groupPos[i][0] -1:self._create_group(i, 1)# 方向 -1跳过角点 m 和 2mnif i ! m and i ! 2 * m n and self.groupNeg[i][0] -1:self._create_group(i, -1)# 记录物理上已打开的小孔序号self.opened set()def _create_group(self, index: int, direction: int):预处理一个光线循环group_id len(self.groupStats)group_loc 0self.groupStats.append([])while True:if direction 1:self.groupPos[index] (group_id, group_loc)index self.pt_count - indexelse:self.groupNeg[index] (group_id, group_loc)if index 2 * self.m:index 2 * self.m - indexelse:index (2 * self.m self.n) * 2 - indexgroup_loc 1# 非角点则翻转方向角点方向不变if index ! 0 and index ! self.m and index ! self.m self.n and index ! 2 * self.m self.n:direction -direction# 若下一状态已访问过说明循环闭合if direction 1 and self.groupPos[index][0] ! -1:breakif direction -1 and self.groupNeg[index][0] ! -1:breakdef open(self, index: int, direction: int) - int:# 若小孔未打开将其所有对应状态插入到所属循环的有序集合中if index not in self.opened:self.opened.add(index)if self.groupPos[index][0] ! -1:gid, gloc self.groupPos[index]bisect.insort(self.groupStats[gid], (gloc, index))if self.groupNeg[index][0] ! -1:gid, gloc self.groupNeg[index]bisect.insort(self.groupStats[gid], (gloc, index))# 查询从当前状态出发沿循环顺序找下一个已打开的小孔gid, gloc self.groupPos[index] if direction 1 else self.groupNeg[index]arr self.groupStats[gid]# 严格大于当前 location 的最小元素pos bisect.bisect_right(arr, (gloc, float(inf)))if pos len(arr):return arr[pos][1]# 循环到开头return arr[0][1]def close(self, index: int) - None:if index not in self.opened:returnself.opened.remove(index)if self.groupPos[index][0] ! -1:gid, gloc self.groupPos[index]arr self.groupStats[gid]p bisect.bisect_left(arr, (gloc, index))if p len(arr) and arr[p] (gloc, index):arr.pop(p)if self.groupNeg[index][0] ! -1:gid, gloc self.groupNeg[index]arr self.groupStats[gid]p bisect.bisect_left(arr, (gloc, index))if p len(arr) and arr[p] (gloc, index):arr.pop(p)---复杂度分析- 预处理O(m n)每个状态恰好属于一个循环。- 单次 open/closeO(log(mn))bisect 维护有序列表的插入、删除、查询均为对数级列表操作本身为 O(k)其中 k 为循环长度但 k ≤ 2(mn)且操作次数 ≤ 10000完全可接受。- 空间O(m n)。

相关新闻

Linux学习21-hadoop续及hadoop高可用部署

Linux学习21-hadoop续及hadoop高可用部署

2026/8/25 14:25:19

yarn部署新增节点node4下载nfs执行yum install nfs-utils命令下载安装NFS相关工具包。node1做免密,与本机也做免密在node1上生成SSH密钥对,并将公钥分发到各节点,实现免密登录。将node1的公钥添加到本机authorized_keys中,实现本机…

驾校管理系统源码 Java+SpringBoot+Vue 万字文档 前后分离

驾校管理系统源码 Java+SpringBoot+Vue 万字文档 前后分离

2026/8/25 14:25:19

一、关键词驾校管理系统,驾校一体化管理平台,驾培机构信息化管理系统二、作品包含源码数据库万字设计文档全套环境和工具资源本地部署教程三、项目技术前端技术:Html、Css、Js、Vue2、Element-ui后端技术:Java、SpringBoot2、MyBa…

面向具身智能的TVA-VLA价值对齐与安全约束机制

面向具身智能的TVA-VLA价值对齐与安全约束机制

2026/8/25 14:15:17

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

Spring Boot + 微信小程序高校食堂自助点餐系统70381----从个性化推荐到订单运营的完整实现

Spring Boot + 微信小程序高校食堂自助点餐系统70381----从个性化推荐到订单运营的完整实现

2026/8/25 14:55:20

摘要该系统面向高校食堂高峰期排队时间长、点餐效率低以及运营数据分散等问题,采用“用户移动点餐 管理端运营”的双端模式。用户端围绕菜单推荐、菜品浏览、加购下单、订单管理、资讯与反馈形成连续体验;管理端负责销售统计、用户管理、内容维护、反馈…

[通信与计算]通信原理02:源编码与熵的考虑

[通信与计算]通信原理02:源编码与熵的考虑

2026/8/25 14:55:20

源编码与熵的考虑本文从通信与信息论角度,系统介绍源编码与熵相关的基本概念和工程实践。首先定义离散无记忆信源的熵,解释其作为理论最优平均码长下界的意义,随后讨论前缀码、哈夫曼编码、算术编码和Lempel-Ziv通用编码等典型方法&#xff0…

模型幻觉检测与抑制技术-金融医疗双案例实战

模型幻觉检测与抑制技术-金融医疗双案例实战

2026/8/25 14:55:20

模型幻觉的检测与抑制技术:金融客服与医疗转录双案例实战声明:本文案例为工程模拟场景,数据指标为演示效果,仅供工程思路参考,不代表真实业务结果。背景:幻觉是"检测"出来的,还是&quo…

Python办公11:定时自动同步重要文件夹至移动硬盘或云端

Python办公11:定时自动同步重要文件夹至移动硬盘或云端

2026/8/25 14:55:20

11:备份专家——定时自动同步重要文件夹至移动硬盘或云端第二阶段:文件管理与系统自动化(9-15)场景引入 你的工作资料只存在电脑本地?一旦硬盘损坏、电脑丢失或中勒索病毒,几年的心血瞬间归零。 专业的做法…

离职电脑隐私清理完整指南——临走前别忘把“自己“带走

离职电脑隐私清理完整指南——临走前别忘把“自己“带走

2026/8/25 14:55:20

背景:最近在试用期,想着万一下一步要走,公司电脑上的个人隐私得清理干净。微信聊天记录、浏览器密码、自己装的软件……哪些该删?怎么删才彻底?整理了一份超全的清理清单,按优先级和类别分好,离…

Windows系统文件WalletProxy.dll丢失找不到问题解决

Windows系统文件WalletProxy.dll丢失找不到问题解决

2026/8/25 14:45:20

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/24 19:53:32

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/24 19:56:07

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

2026/8/25 0:04:34

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

2026/8/25 0:04:35

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

2026/8/25 0:04:35

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…