P13565 「CZOI-R5」按位或 题解
对出题人题解的补充解释:
注:本文章内容由少年当立凌云志团队成员共同讨论得出。
问题:
为什么题解代码中的
答:
- 无法抵消的高位权上的
1 都维护进了ans 。 - 当考虑到
2 的j 次方时,实际是尝试将ans 的2 的j 次方上保持0 (贪心思想)。 - 程序实际上每次重新计算,在保持
ans 不变大的情况下,能否将当前位置保持0 。如果cnt 超过m ,则说明无法实现(即当前位不可能为0 或会影响原本维护好的ans )。如果cnt 不超过m ,则说明可以再保持维护好的ans 的情况下,使当前位置为0 。 - 按上述方法操作,实际上在计算“低位权”时的
cnt 值包含了以前计算“高位权”时的cnt 值。 - 这样做的目的是,在保证时间复杂度合格的同时,大大简化了代码编写复杂度,
虽然也提高了代码理解门槛,但仍然非常值得我们区学习。总结:
非常喜欢这个题目,不仅训练了位运算,还让我学到了一种新的代码思路,读懂代码时真的很震撼,
也可能是我见识太少。