近期总是被cin和cout搞TLE,一时兴起找了些卡常技巧~~
文末有参考说明~
一、IO优化
快读:
inline int Read()
{
int x=0,f=1;char c=getchar();
while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
}
(一般不用输出优化)
inline void out(int x){
if(x>=10){
out(x/10);
}
putchar(x%10+'0');
}
二、inline
在声明函数之前写上inline修饰符,可以加快一下函数调用,但只能用于一些操作简单的函数。涉及递归,大号的循环等很复杂的函数,编译器会自动忽略inline。
三、register
在定义变量前写上register修饰符,用于把变量放到CPU寄存器中,适用于一些使用频繁的变量,如:
register int n,m;
寄存器空间有限,如果放得变量太多,多余变量就会被放到一般内存中。
四、前置++
用++i
代替i++
:
- 后置++需要保存临时变量以返回之前的值,在 STL 中非常慢。
- 事实上,int的后置++在实测中也比前置++慢0.5倍左右
五、bool优化
bool会比int慢,貌似int最快。
六、if () else语句比 () ? () : () 语句要慢,逗号运算符比分号运算符要快。
最后感谢该博主的博客~~