有时候数据量比较大的时候,即使使用C语言提供的scanf函数也是会超时,这个时候就需要快读函数了。之所以可以使用快读,是因为getchar函数要比scanf函数快,所以自己编写的快读函数要更高效一点。还有就是,在快读函数中使用大量位操作代替加减乘除来减少时间的消耗,也是一个很好的选择,数据量越大,效率提升就越明显。这里在判断是否是数字的时候建议千万不要使用isdigit函数,并不知道这个函数到底里面是什么,但单从函数调用的耗时可能也很多,所以还是老老实实用条件判断。下面给出模板代码,不管是什么类型的快读都只要改变一下类型就可以使用。
inline LL
QuickRead() {
LL s
= 0, w
= 1;
char ch
= getchar();
for (; !isdigit(ch
); ch
= getchar())
if (ch
== '-') w
= -1;
for (; ch
>='0' && ch
<='9'; ch
= getchar())
s
= (s
<< 1) + (s
<< 3) + (ch
^ 48);
return (w
== -1 ? -s
: s
);
}
所以,isdigit函数真的拉低效率,如果他的出镜不多可以考虑,频繁出现就别用它了还是。