读入优化

数据流大 \(TLE\) 了怎么办?
那就用读入优化,这可比 cinscanf 快多了
可以把读入优化当作模板记下来,有一些位运算看不懂没有关系,可以慢慢理解

利用 getchar

template <typename T>
inline void read(T &x){
    x=0; __R char ch; __R bool flg=0;
    while (ch=getchar(),ch<48||57<ch) flg^=ch=='-'; x=(ch&15);
    while (ch=getchar(),47<ch&&ch<58) x=(x<<1)+(x<<3)+(ch&15);
    if (flg) x=-x;
}

利用 fread 将所有的数据读入, IN_LEN 就是一次读入的字符数,循环读入

inline char getc(){
    static const int IN_LEN=10000000;
    static char buf[IN_LEN],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,IN_LEN,stdin),p1==p2)?EOF:*p1++;
}
template <typename T>
inline void read(T &x){
    x=0; __R char ch; __R bool flg=0;
    while (ch=getc(),ch<48||57<ch) flg^=ch=='-'; x=(ch&15);
    while (ch=getc(),47<ch&&ch<58) x=(x<<1)+(x<<3)+(ch&15);
    if (flg) x=-x;
}
posted @ 2018-03-10 22:41 xay5421 阅读(...) 评论(...) 编辑 收藏