在一座名为“星环”的巨大环形空间站上,资源仓呈线性排列,首尾相连。 现需要为一艘抵达的货运船,请求一段连续的空闲资源仓用于停靠。 星环的状态由一个十进制 `byte` 序列描述。 序列中的每个数字代表一个“监控单元”,对应着 8 个连续的资源仓。 该数字的二进制表示中的每一位 (`bit`) 描述了一个资源仓的状态:`1` 代表“空闲”,`0` 代表“已被占用”。 为便于管理,所有资源仓从 0 开始统一编号。 若监控单元序列共有 N 个数字,则第一个数字的 `bit 0` 到 `bit 7` 对应 0 7 号资源仓,第二个数字对应 8 15 号,以此类推。 第 N 个数字对应 8N-8 8N-1 号资源仓。 0 号和 8N-1 号资源仓在物理上是相邻的,共同构成了星环的闭环。 货运船当前停靠在 m 号资源仓附近,需要从此位置之后(顺时针方向)寻找一片长度为 k 的连续空闲资源仓。分配时需遵循以下优先级规则: 1. 搜索顺序 :从 m+1 号资源仓开始,按编号递增方向( [m+1, 8N-1] )进行搜索。若未找到,则回到星环起点,继续搜索 [0, m] 区间。 2. 最优匹配 (Best-Fit) :如果找到多个满足长度要求的连续空闲仓段,优先选择长度最接近 k 的仓段。 3. 最近原则 (Nearest-First) :在所有“最优匹配”的仓段中,选择起始编号离 m **距离最近**的一个。 4. 距离计算 :设候选仓段的起始编号为 j ,总仓位数为 8N 。 - 若 j > m ,距离为 j - m 。 - 若 j ≤ m ,距离为 (j + 8N) - m 。(计算回环距离)
输入为一个数字序列,包含两部分: 1. 第一行 :包含两个整数,分别为: k :请求的连续资源仓数量,范围 [0, 65535] 。 m :当前停靠的资源仓编号,范围 [0, 3600] 。 2. 第二行及之后 :描述星环状态的 `byte` 序列(最多 500 个数字),数字之间由空格或换行符分隔,每个数字的范围是 [0, 255] 。
输出一个整数,表示最终分配的资源仓段的 起始编号 。 如果无法找到满足条件的资源仓段,则输出 -1 。
3 6 59 143
15
3 1 0 0
-1
3 1 61 7
8
考点:模拟
限制 3 秒 / 256MB | 标准输入输出
推荐方向:模拟
本题切入点
把字节序列展开成位图后在环上搜索:从 m+1 起环形扫描所有长度 ≥k 的空闲段,按「长度最接近 k → 起点离 m 最近」排序取最优,找不到输出 −1。
不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。
思路框架(模拟 通法 · 非本题专属)
实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。
复杂度:时间 O(操作次数) | 空间 O(状态数)
该范式的通法易错点
样例 1
3 6 / 59 14315样例 2
3 1 / 0 0-1解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2025年秋招-华为-11月12号开发岗。