Lonely Mountain Dungeons

这道题目为什么考场上没想出来。。。就是不太相信自己吧,而且有个技巧不太清楚。。哎

很明显的一点是各个种族是分开的,所以我们每个种族单独考虑就好了

假设对于一个种族,我们已经固定了分的组数为k了,那么肯定是“平均”分到每个组是最好的(这点没办法证明,但是我考场上就是想得这一点啊,要学会相信自己,比较显然吧),按照官方题解的说法,就是

然后就是计算贡献这一点,本来我是想用容斥原理的,但是需要循环,看看官方题解的计算就非常简便,我们要学会(好好想一下整个的时间复杂度)

但是如果kc了怎么办?此时,之后的任何一个组数都当前种族的分法都是固定的(让每个人的组别不同),所以贡献也是一样的,此时就要记住官方题解所使用的技巧了,我们用一个数组add[i]记录下来,最后求出add数组的前缀和就好了(讨论k>c的情形对降低时间复杂度非常重要)

update 2024.7.7

其实证明的话,利用反证法+微扰法就可以证明了,也比较easy

然后这一次做我还是没有想到官方题解这种计数方法,主要原因就是计数对象拘泥于每个微观的人,而官方题解是先宏观地将计数对象定为每个组,这种技巧就要记住

当然利用容斥原理卡常也可以做:对第i类人,当组数k定后,其对答案的贡献就是Cci2(kci mod k)Ccik2(ci mod k)Ccik+12=Cci2kCcik2(ci mod k)cik

将所有的c放入桶中(也就是计数相同c的个数),然后对于每个c,利用数论分块,在以k为下标的数组上利用线段树进行维护(数组的值代表对应k,所有c的贡献),然后计算即可(其实也不用这么麻烦,我们可以像题解一样,对于k>c的情况单独讨论,于是就可以直接用上面的式子O(1)计算贡献)

update 2024.8.9

重新做一遍,做出来了

posted @   最爱丁珰  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示