警示后人
查看原帖
警示后人
705702
user100566楼主2025/1/26 09:52

计算 bwwb-w*w 时,www*w 会爆 32 位整数。

如果你直接框选 ww 的取值范围避免判断 mn\frac{m}{n} 是否为正数,需要注意分类讨论两种不同的范围,同时边界必须严格正确,注意各种取整的正确应用。

判断 mn\frac{m}{n} 是否为正数,以下方法在本题中是不行的:

  • mn>0m*n>0

    m=0,n0m=0, n\not=0 时误判。

    本题的 mnm*n 会爆 64 位整数。

  • mn0m*n\ge0

    n=0n=0 时误判,导致后面整数模 00 时 RE。

    同样爆 64 位整数。

  • m/n>0m/n>0

    m=0m=0 时误判。

    n=0n=0 时,整数除 0 RE。

  • m/n0m/n\ge0

    n=0n=0 时,整数除 0 RE。

  • not([m>0]xor[n>0])\operatorname{not}([m>0]\operatorname{xor} [n>0]), [m>0]==[n>0][m>0]==[n>0]

    n=0,m<=0n=0, m<=0 时,后面整数模 0 RE。

    m=0,n>0m=0, n>0 时误判。

  • not([m0]xor[n>0])\operatorname{not}([m\ge0]\operatorname{xor}[n>0]), [m0]==[n>0][m\ge0]==[n>0]

    n=0,m<0n=0, m<0 时,后面整数模 0 RE。

    m=0,n<0m=0, n<0 时误判。

其它冷门错法也基本是 0 导致的错误。

2025/1/26 09:52
加载中...