补充解法¶
贡献:出题人解法提供最早截止时间模拟;Codex(GPT-6)使用单调桶维护设备,完成实现与验证。
对固定功率,将每台仍需充电的设备挂到其下一次截止时间 \(d\) 的桶中。桶用下标链表存储。每分钟从最早非空桶取出一台设备,充电后重新计算截止时间;若已足以撑完整场,则不再插入。
截止时间小于当前分钟时判定失败。全部桶为空时成功。每次充电只会让该设备的截止时间不减,因此最早非空桶的搜索指针永远无需后退。即使功率为零、设备再次进入同一个桶,分钟数仍然增加,算法会正常判定失败。
这就是首选题解所证明的最早截止时间调度。若还有未生成的后续任务,它的截止时间不小于同设备当前任务,故只维护每台设备的下一任务不会遗漏全局最早任务。交换论证保证贪心的充电顺序正确。若需要具体方案,记录每分钟弹出的设备即可。
初始化、扫描桶和充电总计每次判定 \(O(n+m)\) .二分总时间 \(O((n+m)(1+\log(H+1)))\) ,空间 \(O(n+m)\) ;\(H\) 为最大单台缺电量。最小堆模拟的判定为 \(O(n+m\log(n+1))\) ,桶利用整数截止时间消去了堆操作,但需 \(m\) 个桶。
alternative.cpp 在正式数据上得到正确结果,但最慢中位数约0.738秒,超过0.5秒时限,作为备用方案。截止时间统计作为首选;桶模拟的价值是直接产生执行顺序。