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高可用部署

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

2026/8/26 16:02:00 阅读更多 →
驾校管理系统源码 Java+SpringBoot+Vue 万字文档 前后分离

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

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

2026/8/26 15:59:24 阅读更多 →
Kimi    LeetCode LCP 27. 黑盒光线反射 C语言实现

Kimi LeetCode LCP 27. 黑盒光线反射 C语言实现

这是 LeetCode LCP 27. 黑盒光线反射 的 C 语言实现。解题思路核心思想与 C 题解一致:预处理所有光线循环 有序集合维护已打开小孔。1. 状态定义:每个状态由 (小孔序号, 方向) 组成。方向 1 表示沿 yx,-1 表示沿 y-x。 2. 预处理循环&#x…

2026/8/26 16:05:22 阅读更多 →

最新新闻

新技术分享:ComfyUi+MinimaxH3进阶教程(四)导演台工作流搭建

新技术分享:ComfyUi+MinimaxH3进阶教程(四)导演台工作流搭建

说明:若对文章中的内容有任何困惑的地方,可以对文章进行赞赏,赞赏后,可以发私信给作者,赞赏金额不限制,多少都可以! 前面我们做的MinimaxH3的工作流,只能出单段的视频&#…

2026/8/26 19:36:29 阅读更多 →
解决 PyCharm 在 Conda 环境下索引卡顿的问题

解决 PyCharm 在 Conda 环境下索引卡顿的问题

前几天跟着langchain的教程学习到RAG部分时,由于要学习各种文档加载器的使用所以要安装额外的依赖,但是安装完后每次使用pycharm启动这个项目都会很卡顿,cpu占用率也会直接拉满,编译器中的窗口一直显示“Analyzing project”&…

2026/8/26 19:36:29 阅读更多 →
Go货币处理库currency完整指南:告别float64浮点误差,仅40KB数据搞定全球货币

Go货币处理库currency完整指南:告别float64浮点误差,仅40KB数据搞定全球货币

Go货币处理库currency完整指南:告别float64浮点误差,仅40KB数据搞定全球货币 【免费下载链接】currency Currency handling for Go. 项目地址: https://gitcode.com/gh_mirrors/cu/currency currency 是一个专为 Go 语言打造的货币处理库&#xf…

2026/8/26 19:36:29 阅读更多 →
Go运行时动态代码加载引擎goloader:它比官方plugin包强在哪的5大理由

Go运行时动态代码加载引擎goloader:它比官方plugin包强在哪的5大理由

Go运行时动态代码加载引擎goloader:它比官方plugin包强在哪的5大理由 【免费下载链接】goloader load and run golang code at runtime. (WARNING: this repo has not been maintained for a long time, please take a look at https://github.com/pkujhd/goloader)…

2026/8/26 19:36:29 阅读更多 →
SpringCloud-限流

SpringCloud-限流

企业级 Spring Cloud 项目里,限流一般不会只靠某一个组件,而是根据流量入口、服务类型和限流目标,做分层限流。 一、最常见:在 Gateway 网关层限流 企业项目通常会把第一层限流放在 Gateway。 ┌── user-service 客户端↓ …

2026/8/26 19:35:28 阅读更多 →
#CSP202503C. 模板展开

#CSP202503C. 模板展开

模板展开 - 题目详情 - 曙梦 OJ 题目一共就三种操作 操作一是直接赋值 这个很好理解 操作二是间接赋值 此时相当于保存了一个字符串拼接公式 里面的字符串可能会随着后续赋值而改变 操作三是输出长度 这题根据子任务 很容易拿到40%的分数 若想将分数拿满,就需…

2026/8/26 19:35:28 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

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

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

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

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

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

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

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

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

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

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →