CF2146D Max Sum OR
talent_wei · · 题解
很好的题,但是没有场切。
首先发现这是一个位运算的题目。对于一个数学类的题目,我们有几个通用方法,一个是一定的性质的寻找,另一个就是手玩样例/自己的数据来获得启发。特别的,位运算的题目往往要通过考虑数位解决问题。这个题目就是一句这样的思想做出来的。
D1:
首先发现这个答案是
现在还是不会做,由于是位运算的题目,我们开始找一些和位相关的性质。我们发现,对于位数最多的一些数
我们考虑看样例。通过样例我们发现 D1 中所有的答案都是取到了
提交记录 - CF2146D1
时间复杂度:
这个题的思想:位运算题具有的位的性质 + 手玩样例。
为什么想出来了:正确方式分析了位运算的性质并且对样例进行了手玩。
D2
其实我们刚才说的那个减少问题规模的思想已经是接近正解了,但是还是不是。
由于是区间,尝试差分,但是并无效果。
我们收到 D1 的启发,不妨再次看看样例。我们发现答案并不是简单的
其实是这样:我们还是按位进行考虑,我们发现对于我们刚才特定的
玩一下样例,发现一个事情:0111111 和 1000000 在一个 -1 一个 +1 的情况下还是互补的。这个性质很重要,也很漂亮。我愿意称之为 "二进制的对称性"。有了这个性质,我们就可以在
时间复杂度:
提交记录 - CF2146D2
这个题的思想:对位运算性质的考察。二进制数的 "对称性" 使得每一次或都是可以通过
为什么没想出来:因为没有手玩样例。
营养点:
- 知识:二进制的数或的最优性,还有二进制数的 "对称性"
- 思维:做位运算题目的时候可以进行一些对于位的考虑还有手玩样例。
还是败在了手玩样例上。