简述

平时写的快速读入,大多数是指一个一个字符读入,再转成数字。
但是有一种更快的方法:
强行读入整个输入文件,存在一个字符串里。
接着在这个字符串里利用快速读入转成数字。
速度非常快。

基本代码:

#include<****>
const int N=1<<27;//可以修改,表示输入文件不会超过的长度
char buf[N],*inf=buf;
int read(){//这是一个读不进负数的数字读入
    int k=0;
    while(!isdigit(*inf))++inf;
    while(isdigit(*inf)){
        k=k*10+(*inf-'0');
        ++inf;
    }
    return k;
}

int main(){
    //freopen(***); //开文件必须在fread前面
    fread(buf, 1, N, stdin);//读入整个输入文件
    *****
    return 0;
}

注意:不要用void read(int &),这样会更慢

效果

uoj里最快的代码用的一般都是黑科技读入。
我测试了一下:
先读入一个数n,接着读入n个数。
30%:n<=200000
70%:n<=2000000
100%:n<=10000000
评测环境:i5,4G的windows7下lemon开O2评测
fread快读的效果:
图片挂了
普通快读的效果:
图片挂了
scanf读入的效果:
图片挂了
看得出来,尤其是读入大数据时,fread快读比普通快读快非常多

标签: 黑科技

添加新评论