OI总结-卡常
这个系列终于来了😎,虽然不是什么卡常带师,但是还是有点东西可以写的。
主要是今天看到了很多奇奇怪怪的优化方法,所以还有一些东西需要慢慢补。
一、输入优化
咕咕咕。
二、输出优化
咕咕咕。
三、位运算优化
这里是最魔幻的,我记得 yukuai26 老师说他们大二的时候会讲一堆奇奇怪怪的优化。
char型数字
转int型数字
(卡常效果:微小)char x = '1'; cout << (x & 15); // 输出的是:1
原理:一般的写法是
x = x - '0'
,众所周知字符 $\tt{0}$ 对应的 ASCII 码是 $48$ 。而 $48 = 32 + 16$ ,正好是二进制下第 $5,6$ 位,而 $(15)_{10} = (1111)_2$
$x\& 15$ 就是取了一个在 $48$ 上的增量,这个用法仅适用于数字型。
四、指针优化
访问
a[0]
可以写成*a
(卡常效果:微小)原理:
a[x]
本质上就是*(a + x)
(所以写x[a]
都可以😶🌫️)
五、其他优化
手写常见数据结构,例如
queue
、vector
等(卡常效果:开 O2 后不确定,有时候会反向优化)把
if(xxx) yyy
改成xxx && yyy
(卡常效果:极微小, 但是很美观😶🌫️)