zoukankan      html  css  js  c++  java
  • 读入优化

    对于输入数据非常大的一些可(变)爱(态)题目,scanf就会大大拖慢程序的运行速度,cin就更不用说了,所以我们要用一种高大上的东西——读入优化。

    读入优化的原理其实就是一个一个字符的读入,再组成数字

    ==================================================================

    下面贴一段读入优化的模板

    int read()
    {
    int x=0,f=1;
    char ch;
    while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return f*x;
    }
    

    前方高能预警=====

    下面是dalao的读入优化模板

    template<class T>void read(T &x)
    {
    x=0;int f=0;char ch=getchar();
    while(ch<'0'||ch>'9') {f|=(ch=='-');ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=f?-x:x;
    return;
    }
    

    template就是让这个函数随时可以调用,而且可以用int、double、char……(反正很装13就对了)

    用了指针,会快更会装13。

    下面的f|=(ch'-')如果ch‘-’,f就改符号(还可以判断多个负号),位运算,会快

    <<x就相当于2^x,会非常快;

    最后问号表达式装13

    总之就是一个优(装)化(B)的读入优化


    =我是分割线======

    以下的读入优化需要在freopen条件下使用(其实用的不是很多,大多数情况用上面那种)

    下面是比以上读优都要快的julao的读入优化(划重点)fread

    inline char GET_CHAR(){
    static char buf[maxn],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,maxn,stdin),p1==p2)?EOF:*p1++;
    }
    template<class T>void read(T &x)
    {
    x=0;int f=0;char ch=GET_CHAR();
    while(ch<'0'||ch>'9') {f|=(ch=='-');ch=GET_CHAR();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=GET_CHAR();}
    x=f?-x:x;
    return;
    }
    

    以上摘自读入优化

  • 相关阅读:
    1074. Reversing Linked List (25)
    1056. Mice and Rice (25)
    1051. Pop Sequence (25)
    1001. A+B Format (20)
    1048. 数字加密(20)
    1073. Scientific Notation (20)
    1061. Dating (20)
    1009. 说反话 (20)
    MyBatis学习总结(8)——Mybatis3.x与Spring4.x整合
    MyBatis学习总结(8)——Mybatis3.x与Spring4.x整合
  • 原文地址:https://www.cnblogs.com/xcwang/p/11189166.html
Copyright © 2011-2022 走看看