▎前言
小编之前一直都认为卡常数读音是ka chang shu,实际上是qia chang shu。
希望小伙伴们不要读错了。
▎定义
程序被卡常数,一般指程序虽然渐进复杂度可以接受,但是由于实现/算法本身的时间常数因子较大,使得无法在OI/ICPC等算法竞赛规定的时限内运行结束。
常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令人捉摸不透,有时候会让水平很高的选手迷之超时或者超空间。(copy自百度)
所以,卡常数并不是数论中的那些卡特兰数什么的,只有一个含义:你的程序可能是O(n2),但是题解也是O(n2)的,可是你为什么过不了呢?原因就是常数太大,比方说别人的+可能要1ms,那么你可能就要2ms,所以你的程序就会被很小的常数卡掉,所以我们在写代码时,要采取一些措施才能避免被卡常数。
▎解决方案
详见小编的博客:你还在担心时间复杂度太高吗?
下面还有一些方案:
- 多用scanf和printf,cin和cout很慢,切忌不可混用。
- 三元运算符? :比if else快,但不比if快。
- 频繁使用的数用register,和inline一个用法,只不过有可能把变量存入CPU寄存器,来减少时间。