最近学了些玄学的东西,感觉效果非常明显,加了玄学优化程序立马跑得飞快。
最近比赛反正特别卡常,学些玄学的东西也并非浪费时间嘛QAQ。
这里参考了一些大佬的文章,结合自己的卡常心得,给出几种卡常方法。
NO.11 分支结构优化
三目运算符比if-else快。
NO.10 bool优化
把bool改成int反而更快。。。如果要用到bool数组可以用bitset代替QAQ。
NO.9 数组尽量开奇数大小与变量优化
原因不明……变量优化的话尽量开作用域小的变量,因为建立新变量不耗时,且局部变量访问比全局变量快。
NO.8 适当使用指针
直接指针访问比数组+下标要快一些。
先访问a[i]后访问a[i+1]和a[i+2]这些会快很多。
但是指针使用不当会造成很大的负优化,还会使程序复杂,容易RE。
NO.7 少用algorithm的max,min,swap
推荐手写(这是我个人的习惯,有时也直接用if和三目运算符代替,速度会比用库函数快)。
NO.6 代替取模
用减法搞就行了,比如 i % n
(1≤n<2∗n1 \leq n < 2 * n1≤n<2∗n)改为i >= n ? i - n : i
NO.5 循环里乱搞
for (int i = 1; i <= n; i ++)
改为for (int i(1); i <= n; ++ i)
更快。
NO.4 inline与register
在循环变量之前加register,在函数前加inline,可以相当有效的优化常数。
就像这样:
inline int Function()
{
//program……
}
for (int i = 1; i <= n; ++ i)
改为
for (register int i = 1; i <= n; i ++)
NO.3 数组优化
比如说一个能开一万的数组你非要开