CP中的一些小技巧
从Codeforces里面学到的一些小Trick
本文主要是来自Codeforeces里面的一篇博客。
PSA: don’t use these functions unless you really, really need to
- 计算$\frac{a}{b}$向上取整, 直接用
(a + b - 1) / b
, 不要用ceil((double) a / (double) b)
- 计算正整数根号,不要直接使用
sqrt
,转而使用二分(其实这条我并不是很理解,按理说现代的sqrt的性能是没问题的,会直接翻译到硬件指令)
1 | // works for at least up to (2**31 — 1)**2 |
- 算$a^b$的时候不要用
pow(a, b)
,而是手动循环进行计算。 - 计算正整数的$log_2(a)$时,不要直接使用
log2(a)
,而是使用基于__builtin_clz
或者__builtin_clzll
的方法,如果有C++20的话,也可以用bit_width
的库函数。其实也就是奉劝我们从二进制表示来进行计算,而不是直接根据10进制的数学方法。
https://xingyudev.site/2023/04/07/CP%E4%B8%AD%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E6%8A%80%E5%B7%A7/
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment