此题RE的同学注意了!!
查看原帖
此题RE的同学注意了!!
61602
传奇英雄楼主2020/8/11 16:52

本人RE,结果数组开了10倍就A掉了。。

原因:本人代码:

const int g=200005,h=800005;

表示数组范围。

错误代码:

if(s<<1|1<h)
   d[s]=d[s<<1]+d[s<<1|1];
else d[s]=0;

判断一下当前节点s有没有儿子。(叶子结点没有儿子。但是叶子结点的s<<1|1可能超过数组边界,要特判)

但是!我经过长时间查错后发现:|的优先级竟然比<还要低!(本来以为<优先级很低的。。)

于是:干脆改成:

if(l==r) d[s]=0;
else d[s]=d[s<<1]+d[s<<1|1];

这样更加简单便捷,还不容易出错。

https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin

运算符优先级一定要搞清楚!强烈建议背会!!

2020/8/11 16:52
加载中...