← 返回编程题库
coding-min-fillrate-meet-deadline中等免费版2000ms未尝试

给定每分钟 supply cap 下、按时填满父单所需的最小恒定 maker 填充率

Minimum Constant Maker Fill-Rate to Meet a Parent-Order Deadline Under Per-Minute Supply Caps

开始编码

实现 solution(supply: list[int], Q: int) -> float。交易员需要在 T 分钟内填满父单数量 Q。场所给出每分钟 supply cap supply[t],即第 t 分钟场所最多打印给该交易员的单位数。交易员选定单一恒定 maker 填充率 r(单位 / 分钟,实数,r >= 0),第 t 分钟实际成交 min(r, supply[t]) 单位。返回满足 sum_t min(r, supply[t]) >= Q **的最小非负实数 r**。若不存在这样的 r——即 sum(supply) < Q,连 r = max(supply) 都不够——返回 -1.0Q == 0 时返回 0.0

solution([10, 1, 10, 1], 12) 返回 5.0。两个 cap=1 的分钟无论 r 多大都最多贡献 1 + 1 = 2 单位,剩余 10 单位必须从两个 cap=10 的分钟中获取;取 r = 5 时四分钟分别成交 5 + 1 + 5 + 1 = 12 >= 12,而任何 r < 5 都会在那两个分钟欠量。solution([3, 3, 3, 3], 100) 返回 -1.0,因为 sum(supply) = 12 < 100——即便速率取到无穷大,四分钟也只能合计打印 12 个单位。

关键形态是在 [0, max(supply)] 上**对答案 r 二分**:因为 f(r) = sum_t min(r, supply[t]) 关于 r 非减,谓词 f(r) >= Q 单调。先判定不可行分支(sum(supply) < Q)和平凡分支(Q == 0),然后二分至 hi - lo < 1e-9(远低于比较器的 abs_tol = 1e-7)即停。在 r 上做细步长网格扫描的成本是 O(max_supply / step * T),在输入上界会 TLE。

函数骨架见 stubs/stub.py

实践背景

一个 maker 桌面被指派在 T 分钟的时段内、于单一场所完成 Q 单位的父单义务。盘前分析给出每分钟的 supply 预测 supply[t]——结合该场所的队列深度、桌面的发单档位以及历史成交曲线得出的、第 t 分钟场所预计打印给桌面的最大量。桌面希望全程承诺单一恒定的 maker 速率 r(每分钟挂出的尺寸),而不是动态调尺寸:一是交易成本模型偏好稳定速率,二是恒定速率更易于针对实际成交曲线做归因。问题在于这个最小速率是多少:在 supply 突增的分钟里,场所的 cap 会截断桌面的挂单,所以为这些分钟付一个激进的速率是浪费。若把全部 T 分钟的预测 supply 加起来仍不足 Q,桌面就得知该场所上这张计划本身不可行、需要升级处理——这就是 -1.0 这个返回值的语义。

约束条件

  • 1 <= T <= 5000,其中 T = len(supply) 是分钟数;supply[t] 为非负整数,supply[t] <= 1_000_000
  • 0 <= Q <= 5_000_000_000;Q 为非负整数(待填的父单数量)
  • 若 sum(supply) < Q 则任何速率都不可行 —— 返回 -1.0;若 Q == 0 返回 0.0;否则返回最小的非负实数 r,使得 sum_t min(r, supply[t]) >= Q
  • 输出为单个 float;比较器为 float,rel_tol = 1e-6、abs_tol = 1e-7(容差较松,因为答案由二分至 ~1e-9 内部精度产生)
  • 参考解复杂度:O(T * log(max(supply) / 1e-9)) ≈ O(T * 100),内层谓词为 O(T)

样例

Case 1 · statement-example: uniform supply needs full burn

输入: [[5,5,5,5],8]

期望: 2.0000000001164153

supply 全为 5、4 分钟,要 8 单位 → 每分钟 2.0 即可、所有 supply 都不绑定

Case 2 · statement-example: bursty supply with binding caps

输入: [[10,1,10,1],12]

期望: 5

supply [10,1,10,1],cap=1 的两分钟最多贡献 2,剩 10 来自两个 cap=10 的分钟,r=5 在那两分钟各产 5、合计 12

Case 3 · statement-example: total supply less than Q is infeasible

输入: [[3,3,3,3],100]

期望: -1

总 supply 12 < Q=100,即便 r=∞ 也只能填 12,按合约返回 -1.0

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · statement-example: uniform supply needs full burn

输入: [[5,5,5,5],8]

期望: 2.0000000001164153

supply 全为 5、4 分钟,要 8 单位 → 每分钟 2.0 即可、所有 supply 都不绑定

Case 2 · statement-example: bursty supply with binding caps

输入: [[10,1,10,1],12]

期望: 5

supply [10,1,10,1],cap=1 的两分钟最多贡献 2,剩 10 来自两个 cap=10 的分钟,r=5 在那两分钟各产 5、合计 12

Case 3 · statement-example: total supply less than Q is infeasible

输入: [[3,3,3,3],100]

期望: -1

总 supply 12 < Q=100,即便 r=∞ 也只能填 12,按合约返回 -1.0