由于 C++ 中的 / 实际上是向零取整而非向下取整,因此,若在递归过程中 n,a,b,cn,a,b,cn,a,b,c 中存在负数,可能会使向下取整变成向上取整,导致计算错误。
/
类欧的常数较大,如果将 F,G,HF,G,HF,G,H 分开计算,可能会重复调用,导致复杂度不是 O(logn)O(\log n)O(logn)。一种解决方法是,使用哈希表或 map 来记录,但是这样常数非常大,无法通过此题。解决方法是,让每次 F,G,HF,G,HF,G,H 从相同的位置转移过来,从而能将 F,G,HF,G,HF,G,H 统一计算。
既然出现了取模,在模意义下除以二就不能写成 >>,而要乘二的逆元。
>>
一次取模都不能忘,如果你 WA 了很靠后的位置,很有可能就是漏取模。建议检查自己程序是否有 UB。