zoukankan      html  css  js  c++  java
  • 【FBI WARNING】读入优化

    感觉这个优化挺重要的,毕竟在2017NOIP提高的那个奶酪问题 写出代码来 就只是读入感觉就超时 过了样例又如何? 最后还不是TLE。

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

    读入优化的原理其实就是一个一个字符的读入,再组成数字                               ---Peper(我百度找的)


    插入一套比较简单的读入优化

     当然 对于我来说还是比较简(困)单(难)的。

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

     这就是最基本的读入优化,通过getchar函数依次读入字符,用x记录答案,用f判断正负。

     ps:在主程序中调用时int n=read();即可

    ===========================前方高能预警===============================

    在插一套某大佬的版子

    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

    ps:对于位运算的话  感觉自己会迷糊 但好像会快 恩对 很快。

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

    pss:不过TA真的比普通的读入优化要很多

    psss:调用时直接read(n)就好了这就是指针的好处

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

    以下的读入优化需要在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;
    }

    简单的来说就是把getchar函数手写,改为文件读入(fread)。

    eg:fread原理:把数据流整段的存到数组buf中,整段的读取,数组存满了再重新覆盖。所以比getchar()一个一个读要快

    其实我也不是很懂fread,感性理解吧

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

    一点点忠告:说实话用不用读入优化完全看自己,如果要用就把它当做一个模板,哪怕是a+b的时候也打上。我就是这样(有点读入情节)虽然有的时候并不能快多少,但是至少会让自己的代码效率稍微高那么一丢丢,而且天天打,永远不会错。

    但有些dalao平时不用,考试的时候打上,其实我不太建议这样。因为这样的话很容易会打错 ,然后0分。非常的可惜,所以如果考试要用的话最好多打几次保证自己不会错,防止在复赛上gg

    NOIP2018RP++。

    我要AK IOI (逃

    感谢julao:

    Peper

  • 相关阅读:
    关于RGB屏调试的一些知识(转)
    分享调试SI4432的一些小经验(转)
    音频压缩SPEEX应用,对讲机
    Codec 2 开源语音编解码器
    java导读
    视频监控知识汇总
    “inno setup打包,win7下安装没有桌面快捷方式,xp下安装正常”
    MFC设置窗体大小SetWindowPos
    C++中运行外部程序
    C++调用外部应用程序的方法的整理总结(常用)
  • 原文地址:https://www.cnblogs.com/_Yrh/p/7214259.html
Copyright © 2011-2022 走看看