HELP! 老生常谈的本地运行ok,评测4个wa

P1464 Function

啊 你输出换行呢(( Hack: ``` 20 20 20 -1 -1 -1 ``` 正确的输出: ``` 1048576 ``` 您的程序的输出: ``` 0 ``` 不知道是哪里爆掉了,您自己调调吧
by Echidna @ 2021-07-21 15:19:13


@[某学oi的蒟蒻](/user/82284) **orz 回滚代码的时候把换行弄掉了(** 我在洛谷IDE上测试是没问题的,实在是离奇到家了。 感谢你耐心答复(;T⌒T) ![](https://cdn.luogu.com.cn/upload/image_hosting/d1vw2al2.png)
by omemi @ 2021-07-21 15:28:08


问题出现在 ```cpp if(a>20 || b>20 || c>20) return m[nd(20,20,20)]=dfs(20,20,20); ``` 我提交了C++11,但在洛谷IDE和本地都用的是C++17,因此得到了不一样的结果。 结果不一样的原因是在C++11没有规定 ```cpp m[nd(20,20,20)]=dfs(20,20,20); ``` 这样的语句先计算等号左边还是先计算等号右边,全凭编译器自己安排。于是g++先计算了 ```cpp m[nd(20,20,20)] ``` 于是相当于 ```cpp m.emplace(nd(20, 20, 20), 0) ``` 然后再计算右值,这时候执行 dfs,就会被count到,然后返回0,导致结果错误。 感谢 **Echidna** 佬指出错误数据,事实上问题就出在这,但是一年前的我没有注意到。 防止打扰就不at了,祝佬题题ac。 本帖终结。
by omemi @ 2022-10-27 22:30:15


|