Processing math: 1%

Codeforces Round #684 (Div. 1)

场上在意识到B会带一个log时果断弃掉去开C,事后证明这是个明智的选择

A

顺序填,转化为处理2×2的情况,手玩一下能很简单推出

B

每次删掉度数最小的点删掉,若其\ge K的点可以判断情况1
对于找到K的团,按上面删的同时,若度数最小的点度数为k-1可以把这k个点拉出来判断一下,用map来判断邻边
度数\ge k-1的点有O(\frac{m}{k})个,每次判断时间复杂度为O(k^2logn)
总复杂度O(mklogn),观察到有效的kO(\sqrt{m})级别的

C

观察1:操作1影响的是一段连续区域,产生的效果是赋值
观察2:操作二只会选取O(logV)段区间消费
以上操作均可用线段树维护,时间复杂度O(nlognlogV)

D

dp1_{i}i个座位i个人的合法方案数,考虑枚举最后一个人的座位,发现两边的位置的转移是独立的

dp1_{i}=\sum\limits_{j=1}^i [j+(i-j+1)]{i-1\choose j-1}dp1_{j-1}dp1_{i-j}

dp2_ii个座位i个人的合法方案的疯狂程度之和,考虑枚举最后一个人的座位,单独算其疯狂度,前i-1个人的疯狂度考虑增量

dp2_{i}=\sum\limits_{j=1}^i ({j\choose 2}+{i-j\choose 2}){i-1\choose j-1}dp1_{j-1}dp1_{i-j}+[j+(i-j+1)]{i-1\choose j-1}(dp2_{j-1}dp1_{i-j}+dp2_{i-j}dp1_{j-1})

dp3_{i,j}(i>j)i个座位j个人的合法方案数,考虑枚举最长的全部被占用的后缀长度l
l=0,则方案数为dp3_{i-1,j};否则,由于第n-l个座位是空的,所以两边的位置也是独立的

dp3_{i,j}=dp3_{i-1,j}+\sum\limits_{l=1}^j {j\choose l}dp3_{i-l-1,j-l}\cdot dp1_{l}

dp4_{i,j}(i>j)i个座位j个人的合法方案的疯狂程度之和

dp4_{i,j}=dp4_{i-1,j}+\sum\limits_{l=1}^j {j\choose l}(dp4_{i-1-l,j-l}\cdot dp1_{l}+dp3_{i-1-l,j-l}dp2_l)

实际上,这个问题可以做到O(nlogn),但是parking and tree这套理论我不太懂,所以暂时先咕了

E

结论0:将有效点看作节点,两点之间有边的充要条件为两点均为有效点且相邻。那么图构成了一棵树。

证明:
对于有效点(0,?),(?,0)这类的点,会形成一个边框框柱上边界与左边界
对于有效点(x,y)(x,y\ge 1),考虑最低的1,易得(x-1,y)(x,y-1)有且仅有一个点有效

结论1:令点(0,0)的深度为0,有效点(x,y)的深度为x+y

根据上面的证明易得

容易发现这是翻硬币游戏的拓展版本
考虑单个点的SG函数
结论2:有效点(x,y)的SG函数等于2^{dep}

对深度施归纳易得

那么对深度为dep的点操作一次,等价于游戏的SG函数异或上2^{dep+1}-1
可以发现最小操作次数就是游戏的SG函数,在二进制下的段数

对于x_1,y_1,x_2,y_2所造成的影响一定是一段连续区间为1,可以通过求lca判断
如何求lca呢?通过结论1的证明能发现,每次往上爬是不断对最低位1最小的一维-1
通过对位处理,可以O(logV)求得lca

终于更完了,撒花✿✿ヽ(°▽°)ノ✿
吐槽一下官方题解比我更都慢...

posted @   Grice  阅读(181)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示