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

[Luogu 13345] EGOI 2025:IMO

先根据排序方案确定最终顺序。下文称第 \(i\) 个人为最终排名为 \(i\) 的那个人,其原始编号为 \(id_i\),总成绩为 \(v_i\)

若第 \(i\) 个人公布了 \(c_i\) 道题,公布部分成绩为 \(s_i\),则可能成绩区间为 \([s_i, s_i + k(m - c_i)]\),有 \(s_i + k(m-c_i) + [id_i < id_{i-1}] \le s_{i-1}\)

考虑 DP,设 \(f(i, s)\) 表示前 \(i\) 个人,第 \(i\) 个人公布部分成绩 \(\ge s\),的最小公布部分总数。先考虑等于 \(s\),枚举 \((c, s)\)

\[f(i, s) = \min_{(c, s)} f(i - 1, s + k(m - c) + [id_i < id_{i-1}]) + c \]

然后取一轮后缀 \(\min\) 即可得到真实的 \(f(i, s)\)

可以通过暴力 DP 找出第 \(i\) 个人合法的 \((c, s)\)\(O(m)\) 阶段,\(O(m)\) 枚举 \(c\)\(O(mk)\) 枚举 \(s\),这部分复杂度 \(O(nm^3k)\)

事实上,因为 \(s \le v_i\),只有 \(s \in [v_{i+1}, v_i]\) 的可能是合法的,令 \(l_i = v_i - v_{i+1} + 1\),至多只有 \(ml_i\)\((c, s)\),且 \(\sum l_i = n + mk\)

为保证复杂度,通过从全部公布倒着 DP 未公布的部分找 \((c, s)\),单轮 \(O(m^2l_i)\),把 \(c\)__int128 压一下可以消掉一个 \(m\)

总时间复杂度:\(O(nm + m^2k)\)

http://www.zskr.cn/news/13263.html

相关文章:

  • 详细介绍:flutter 编译报错java.util.zip.ZipException: zip END header not found
  • 又一通信芯片厂商完成数亿元融资!
  • 做题总结
  • 【前言】从重复劳动的奴隶到自动化大师
  • VS2022激活秘钥
  • grammar(?
  • 9.28作业
  • 2025.9.28+7[未完]
  • 常见NAS文件传输协议中SMB、FTP、NFS、 rsync、WebDAV服务各有何区别?
  • 在Java中原码反码补码的区别
  • US$49 BMW F Series Coding Authorization for CGDI Prog BMW MSV80 Key Programmer
  • 苍穹外卖-day02(新增员工,员工分页查询,启用禁用员工账号,编辑员工,导入分类模块功能代码) - a
  • XDG和桌面环境
  • PocoEmit遥遥领先于AutoMapper之循环引用
  • CUDA编程(CUDA_By_Example笔记)
  • 苍穹外卖-day01(软件开发整体介绍,苍穹外卖项目介绍,开发环境搭建,导入接口文档,Swagger) - a
  • 新学期每日总结(第6天)
  • 课后3
  • New_Sort_Integer_Sequential解析
  • mysql的单表如何仅保留半年的数据
  • (第三次)Numpy Pandas
  • 2025 采购传感器不踩坑!国内传感器优秀厂家清单:解决精度,防爆,极端环境难题
  • 跟brocode用c语言做tictoktoe井字棋 - 指南
  • 完整教程:操作系统之初识Linux
  • 使用mpm-itk让Apache以不同用户身份运行的完整指南
  • sg.如何打开PySimpleGUI调试器窗口?
  • 腾讯开源 AudioStory!能生成 150 秒故事长音频,还会剧情拆解 + 自动配乐 - 详解
  • 9.27学习笔记
  • 开学日记
  • 论文解读-《Less is More on the Over-Globalizing Problem in Graph Transformers》 - zhang