针对 CF1715D 和 ARC146B 的总结与提升

在这两个位运算问题上我都很快地考虑出大致方向,但是却出现了 WA,严重拖慢了我的进度。在此分析:

对于 ARC146B,出现了一个没有判断 \(0\) 的问题,通常以下几种地方有可能出现问题:

  • 树形结构的 \(n=1\) 情况
  • 位运算的 \(31\)\(32\) 位的时候如果有一个地方 int 没有转换过来就会出锅:
    1 << dig 是不可以算 \(dig \ge 31\) 的情况的,应当写成 1ll << dig
  • 任何时候的 \(0\)
    1ll << dig,在 \(dig\) 为任何数的时候都不可能算出 \(0\),应该特判;
    log2(x) + 1\(x=0\) 的时候结果为 \(1\),实际上通常情况下应该为 \(0\)
    ...

我们在提交问题的时候,就要考虑有没有哪些情况会出现错误,特别地一定要思考以上三种情况。其他情况因题而异。

对于 CF1715D,从大到小贪心弄清楚了,但是实现的细节没有搞得很清楚,从前到后出现了:没有先处理 \(i=j\) 的情况,搞错贪心顺序,将已经确定的数继续修改,顺序错误应该先考虑这一位是否必须是 \(1\) 再更新...等问题,特别是最后一个问题到了比赛的结束时间还是存在。

赛时改了三个问题,但是还是遗留了一个问题。这样效率很低。

怎么解决?对拍!是应该养成对拍的习惯了。对于这一题,我们可以写出暴力 \(O(a_i^n)\) 的程序进行对拍,从而针对错误的数据进行修改。

另外,xqw 大佬教我的单步调试在对拍的时候也非常有用处。

以上是对 WA 的解决方案的分析。

posted @ 2022-08-21 17:32  OIer某罗  阅读(50)  评论(0编辑  收藏  举报