Codeforces Global Round 做题记录

Codeforces Global Round

Round 2#

*CF1119G#

非常厉害的题

m 个敌人,第 i 个敌人的生命值为 hpi。我方有 n 个人,需要将 n 个人分为 m 组,进行若干轮攻击。每一轮攻击,每一组可以任意选择一个敌人进行攻击,使其生命值减去组中的人数。求最少需要进行多少轮攻击才能使得所有敌人的血量值非正,并给出方案。

1mn1061hpi106

解法

答案的下界是 hpin,考虑如何取到这个下界。一种巧妙的办法是,所有人先攻击第一个敌人,当第一个敌人生命值小于 n 时,分出 hp1modn 人攻击一号敌人,剩下的攻击二号敌人。那么还需要分出 (hp1+hp2)modn 人攻击第二个敌人,以此类推。那么每一个敌人都能被恰好攻击完(除了最后一个)。

将每一个前缀和对 n 取模得到数组 r,将 r 排序,我们希望分组后人数的每一个前缀和对应一个 r,那么只需要对 r 做差分即可。输出攻击方案只要逐个攻击即可。

作者:Terminator-Line

出处:https://www.cnblogs.com/Terminator-Line/p/18703277

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Terminator-Line  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示