该多练了.
考虑四个选项在序列里面,无论什么样的排列方式都能将它们取出来
因此排个序输出就好..
然而还是卡了很久..
submission
注意到如果存在斜对角的两个0,或者相邻的两个0,就可以从这一块开始每次消一个1
否则只有一个0则是第一次会消两个1,如果没有0则第一次会消除3个1
讨论完输出1的个数减去不同情况的第一次消耗就好
submission
考虑 的暴力转移的DP
发现对于一个位置 ,
由于 ,
只会对 的位置产生贡献
超出 的范围的 都不满足
submission
对于当前的i,考虑能够转移的选项 ,有
从高位往低位考虑,令 表示 的 位
讨论 的关系
- 若 ,
对应到一位上的时候就只有 这一种情况
即
- 若 , 则
开一个01 Trie维护一个 ,从高往低考虑 的每一位,前面部分相等,在第一个位置 有 ,就是一个满足条件的转移选项,我们想知道从这个 转移过来能拿到的值,就要开一个
表示trie
当前这个节点, 在这位上是 的最值
对于每个i,从高往低考虑 的每一位,
令
考虑第 位不相等,
取反就得到当前节点上满足条件的 节点,然后也应该满足情况,根据式
即 ,在f里面查这个的最大值
考虑第 位相等,那么就继续找下去
插入的时候用转移来的 去更新
写法看的Jiangly的,感觉写的是最清晰的..
submission