当前位置: 首页 > news >正文

CF1666E 题解

这题可以把分配方案改写成“分割点”问题。

设整段是[ 0 , l ] [0,l][0,l],定义分割点:

0 = x 0 < x 1 < ⋯ < x n = l 0=x_0<x_1<\cdots<x_n=l0=x0<x1<<xn=l

那么第i ii个人拿到区间[ x i − 1 , x i ] [x_{i-1},x_i][xi1,xi],并且要满足:

  • 长度限制:L ≤ x i − x i − 1 ≤ R L \le x_i-x_{i-1}\le RLxixi1R
  • 包含房子:x i − 1 ≤ a i ≤ x i x_{i-1}\le a_i\le x_ixi1aixi
  • 区间首尾相接且覆盖全段

目标是让最长与最短长度差最小,也就是尽量缩小R − L R-LRL

1. 可行性检查check(L,R)

从左到右维护“当前分割点x i x_ixi的可行范围”[ d , u ] [d,u][d,u]

已知上一步x i − 1 ∈ [ d , u ] x_{i-1}\in[d,u]xi1[d,u],则当前点先由长度得到:

x i ∈ [ d + L , u + R ] x_i\in[d+L,\ u+R]xi[d+L,u+R]

再与“必须包含第i ii个房子、且不能越过下一个房子位置”取交集。

如果某一步交集为空,就不可行;全部走完且能到达x n = l x_n=lxn=l,就可行。

这个检查是线性的,复杂度O ( n ) O(n)O(n)

2. 如何求最优的L , R L,RL,R

代码采用两次二分:

  1. 先二分最大的L LL(给很大的R RR,只看最短长度能有多大);
  2. 固定这个L LL,再二分最小的R RR

这一步的正确性可以这样理解:

  • 记某个方案的最短段长为min ⁡ \minmin,最长段长为max ⁡ \maxmax,目标是最小化max ⁡ − min ⁡ \max-\minmaxmin
  • 若一个最优方案的min ⁡ \minmin不是“全局可行的最大值”,说明还可以把所有区间整体往更均衡方向推进,使最短段再增大而不破坏可行性,这与“最优”矛盾。
  • 换句话说,最优解中一定存在一个方案,其最短段长取到可行上界L ∗ L^*L(也就是第一步二分出的最大L LL)。
  • 因此最优解与“L = L ∗ L=L^*L=L的可行集合”一定有交集;在这个交集里再取最小可行R RR,就等价于最小化max ⁡ − min ⁡ \max-\minmaxmin

得到一组满足要求的最优上下界后,再跑一次check(L,R)并记录每一步可行区间。

3. 构造具体答案

先把最后一个分割点定为x n = l x_n=lxn=l,再从后往前回推:

  • 保证与下一个分割点的距离仍在[ L , R ] [L,R][L,R]内;
  • 保证每个x i x_ixi仍落在前面算出的可行区间内。

这样就能得到一组合法分割点x 1 , … , x n − 1 x_1,\dots,x_{n-1}x1,,xn1,进而输出所有区间
[ x i − 1 , x i ] [x_{i-1},x_i][xi1,xi]

http://www.jsqmd.com/news/736207/

相关文章:

  • 《文字定律》下册第三篇 (走向三级文明的人和AI)
  • 猫抓浏览器插件终极指南:高效嗅探网页视频音频资源的免费开源工具
  • MECOOL KP1智能投影仪评测:Android TV与1080P画质体验
  • EASY-HWID-SPOOFER:3大核心技术深度解析与实战指南
  • 还在吃预制菜的年轻人,被硬生生地逼成了宠物营养师
  • VMware Workstation 17保姆级教程:手把手教你安装Ubuntu 22.04.3 LTS服务器版(含SSH配置与Root登录)
  • 开源命令行工具指南:构建高效开发工作流与自动化实践
  • 保姆级教程:给你的Nginx access.log“加料”,轻松记录POST请求体和自定义请求头
  • AI驱动社交媒体自动化:从CLIP图像识别到GPT文案生成的技术实践
  • 通俗数学6-经典电子半径和康普顿波长的比正好是反常磁矩的倒数
  • 从WebSocket到LevelDB:构建极致高效聊天应用的技术架构与实践
  • Python爬虫实战:抖音无水印视频下载工具原理与避坑指南
  • 【限时解禁】VSCode 2026私有Agent Hub部署方案:仅限首批200家企业的内测配置模板与安全沙箱白皮书
  • 在Windows 10/11中实现HEIC缩略图预览:开源解决方案完全指南
  • 当核心交换机宕机时,你的业务能扛几秒?深度拆解MSTP+VRRP的故障切换实战
  • 2026年奔驰商务车价格拆解:靠谱服务商的判断标准 - 优质品牌商家
  • 028 PID控制器的局限性分析
  • 基于Cursor AI与Next.js+Prisma的全栈Todo应用开发实战
  • 2026年冲刺上音音乐艺考培训排行及避坑参考:考上音区哪家培训、考浙音去哪家培训、萨克斯艺考培训、走读音乐艺考选择指南 - 优质品牌商家
  • 如何用OBS多平台推流插件实现一次编码同步直播到多个平台
  • 【仅限首批金融客户开放】:VSCode 2026专属Security Pack v2.1内测权限申请通道开启,含证监会《证券期货业网络信息安全管理办法》智能映射引擎
  • 【前端(十)】CSS 过渡与动画笔记
  • IEEE软件需求规格说明标准
  • 从PyTorch DDP到NCCL底层:一次搞懂GPU跨机通信(RDMA/IB/RoCE扫盲)
  • 优雅重启:基于Unix域套接字的进程零停机更新原理与实践
  • LeetCode自动化刷题工具:从原理到实践,打造高效算法训练工作流
  • 从5V线圈到120V开关:手把手教你为ESP32选配合适的继电器模块(含驱动电路设计)
  • 基于yapcap的轻量级网络抓包与协议解析实战指南
  • 开源机械爪项目全栈解析:从硬件设计到ROS集成与自适应抓取
  • 别再死记硬背了!一张图看懂CPU缓存映射(直接/全相联/组相联)