最近做SPOJ,发现很多题目的读入都是有大幅度优化余地的。事实上,在C++中,使用scanf()读入整数或者实数的速度都非常慢。我们可以通过一次读入一整行的来加快速度,方法是使用gets()。
对于gets()这个函数,GCC的文档建议不要使用。我个人的感觉是只要使用得当,这个函数还是大有用处的。比如下面的代码:
char buf[10000],*o; inline int getint() { while (!isdigit(*o) && *o!='-') ++o; int r = 0,f = *o=='-'?++o,1:0; while (isdigit(*o)) r = r*10+*o++-'0'; return (f?-r:r); }
这个代码提供了一个getint()的函数来加快读入整数的速度。我们使用o = gets(buf),时候就可以进行相关的操作了。在这个函数的基础上稍作改进还可以读入实数等等。