什么是卡常?
程序被卡常,一般指程序复杂度可以接受,但是由于实现/算法本身的时间常数因子较大,无法在规定的时限内运行结束。
先看一组数据(by my friend cdsidi)
[单位毫秒,100000int读入测试]
快读(带inline):47
scanf输入:1140
快读:50
scanf输入:1121
快读:50
scanf输入:1122
快读:52
scanf输入:1147
快读:50
scanf输入:1239
快读:51
scanf输入:1189
快读:50
scanf输入:1134
快读:51
scanf输入:1142
快读:51
scanf输入:1135
快读:50
scanf输入:1125
快读:54
scanf输入:1128
可以看到,基本上快读稳定在scanf的40分之一
快读可以避免大部分卡常
基本思路:
快速读入代码
1 inline int read() 2 { 3 int fu=1,k=0; 4 char a=getchar(); 5 while(a<'0'||a>'9') 6 { 7 if(a=='-')fu=-1; 8 a=getchar(); 9 } 10 while(a>='0'&&a<='9') 11 { 12 k=k*10+a-'0'; 13 a=getchar(); 14 } 15 return fu*k; 16 }