P13565 「CZOI-R5」按位或 题解

· · 题解

对出题人题解的补充解释:

注:本文章内容由少年当立凌云志团队成员共同讨论得出。

问题:

为什么题解代码中的 cnt 可以每次初始化为 0

答:

  1. 无法抵消的高位权上的 1 都维护进了 ans
  2. 当考虑到 2j 次方时,实际是尝试将 ans2j 次方上保持 0 (贪心思想)。
  3. 程序实际上每次重新计算,在保持 ans 不变大的情况下,能否将当前位置保持 0 。如果 cnt 超过 m,则说明无法实现(即当前位不可能为 0 或会影响原本维护好的 ans)。如果 cnt 不超过 m,则说明可以再保持维护好的 ans 的情况下,使当前位置为 0
  4. 按上述方法操作,实际上在计算“低位权”时的 cnt 值包含了以前计算“高位权”时的 cnt 值。
  5. 这样做的目的是,在保证时间复杂度合格的同时,大大简化了代码编写复杂度,虽然也提高了代码理解门槛,但仍然非常值得我们区学习。

    总结:

    非常喜欢这个题目,不仅训练了位运算,还让我学到了一种新的代码思路,读懂代码时真的很震撼,也可能是我见识太少

宁宁世界第一可爱!