1. 读入优化

  • C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢?

  • 其实,经过类似高精度的处理,就可以实现类型转换啦!

  • 下面是正负数读入优化模板:

  • #include<cctype>
    inline int read()
    {
    int X=,w=; char ch=;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<)+(X<<)+(ch^),ch=getchar();
    return w?-X:X;
    }

    isdigit(x)表示 xx 是否是 0 ~ 9 的整数 ,是则返回 truetrue ,不是则是 falsefalse 。

    注意要用 cctype 头文件。

    像这样“X=read()”使用函数即可,效率超高!

    这里补充一个正负实数的读入优化:

    inline double dbread()
    {
    double X=,Y=1.0; int w=; char ch=;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=X*+(ch^),ch=getchar();
    ch=getchar();//读入小数点
    while(isdigit(ch)) X+=(Y/=)*(ch^),ch=getchar();
    return w?-X:X;
    }
  • 还有一个版本
  • int read(){
    int x=;bool f=;char c=getchar();
    while (c<''||c>''){if (c=='-')f=;c=getchar();}
    while (c>=''&&c<=''){x=(x<<)+(x<<)+(c^);c=getchar();}
    return f?-x:x;
    }
  • 附fread:

    char buffer[],*S,*T;
    inline char Get_Char() {
    if (S==T){
    T=(S=buffer)+fread(buffer,,,stdin);
    if (S==T) return EOF;
    }
    return *S++;
    }
    inline int read(){
    char c;int re=;
    for(c=Get_Char();c<''||c>'';c=Get_Char());
    while(c>=''&&c<='') re=(re<<)+(re<<)+(c-''),c=Get_Char();
    return re;
    }
  • 2. 输出优化

    • 在个别繁杂题目中,也可以使用输出优化!

    • 与读入优化类似,使用用来输出字符的“putchar()”函数,也可到目的

    • 下面是正负数输出优化模板:

    • inline void write(int x)
      {
      if(x<) putchar('-'),x=-x;
      if(x>) write(x/);
      putchar(x%+'');
      }

      总结

      • 使用读入优化与输出优化,可以在一些题目中赢得很多时间,甚至逆转AC!

      • 而且代码很短,性价比很高,完全可以经常使用!

      注意

      • 切记在使用时,应注意数据类型大小和正负!
05-11 13:02