读入优化与输出优化
C++是一门神奇的学科。。。
在读入/输出时,我们经常用到:
scanf , cin , printf , cout
但是,在算法竞赛中,我们奉行一个原则:
效率第一!
于是,便产生了各种各样的奇技淫巧。。。
下面的读入与输出优化就是其中之一。
读入优化:
C++自带的 scanf 已经很快了,但是100W的数据要0.6~0.8s,很明显,还是慢了。
为什么?因为 scanf 带了许多厉害但是我们不需要的的特判。
于是,读入优化破壳而出:
inline int read(){ int date=0,w=1;char c=0; while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();} while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();} return date*w; }
调用时,只需要:
int x; x=read();
即可。
效率超级高!
输出优化:
有读入优化,就有输出优化:
inline void write(int x){ if(x<0){putchar('-');x=-x;} if(x>9)write(x/10); putchar(x%10+'0'); }
调用时,只要:
int x=10; write(x);
即可。
时间大幅降低!
总结:
C++中还有各种各样的奇技淫巧,比如什么:
inline , register
等。
好好利用它们,可以卡掉那些TLE的点,甚至逆转AC!