极限IO优化

Posted rorschach-xr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极限IO优化相关的知识,希望对你有一定的参考价值。

namespace IO 
    #define BUF_SIZE 100000 
    #define OUT_SIZE 100000 
    #define ll long long 
    //fread->read 
 
    bool IOerror=0; 
    inline char nc() 
        static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE; 
        if (p1==pend) 
            p1=buf; pend=buf+fread(buf,1,BUF_SIZE,stdin); 
            if (pend==p1)IOerror=1;return -1; 
            //printf("IO error!\n");system("pause");for (;;);exit(0); 
         
        return *p1++; 
     
    inline bool blank(char ch)return ch==‘ ‘||ch==‘\n‘||ch==‘\r‘||ch==‘\t‘; 
    inline void read(int &x) 
        bool sign=0; char ch=nc(); x=0; 
        for (;blank(ch);ch=nc()); 
        if (IOerror)return; 
        if (ch==‘-‘)sign=1,ch=nc(); 
        for (;ch>=‘0‘&&ch<=‘9‘;ch=nc())x=x*10+ch-‘0‘; 
        if (sign)x=-x; 
     
    inline void read(ll &x) 
        bool sign=0; char ch=nc(); x=0; 
        for (;blank(ch);ch=nc()); 
        if (IOerror)return; 
        if (ch==‘-‘)sign=1,ch=nc(); 
        for (;ch>=‘0‘&&ch<=‘9‘;ch=nc())x=x*10+ch-‘0‘; 
        if (sign)x=-x; 
     
    inline void read(double &x) 
        bool sign=0; char ch=nc(); x=0; 
        for (;blank(ch);ch=nc()); 
        if (IOerror)return; 
        if (ch==‘-‘)sign=1,ch=nc(); 
        for (;ch>=‘0‘&&ch<=‘9‘;ch=nc())x=x*10+ch-‘0‘; 
        if (ch==‘.‘) 
            double tmp=1; ch=nc(); 
            for (;ch>=‘0‘&&ch<=‘9‘;ch=nc())tmp/=10.0,x+=tmp*(ch-‘0‘); 
         
        if (sign)x=-x; 
     
    inline void read(char *s) 
        char ch=nc(); 
        for (;blank(ch);ch=nc()); 
        if (IOerror)return; 
        for (;!blank(ch)&&!IOerror;ch=nc())*s++=ch; 
        *s=0; 
     
    inline void read(char &c) 
        for (c=nc();blank(c);c=nc()); 
        if (IOerror)c=-1;return; 
     
    //fwrite->write 
    struct Ostream_fwrite 
        char *buf,*p1,*pend; 
        Ostream_fwrite()buf=new char[BUF_SIZE];p1=buf;pend=buf+BUF_SIZE; 
        void out(char ch) 
            if (p1==pend) 
                fwrite(buf,1,BUF_SIZE,stdout);p1=buf; 
             
            *p1++=ch; 
         
        void print(int x) 
            static char s[15],*s1;s1=s; 
            if (!x)*s1++=‘0‘;if (x<0)out(‘-‘),x=-x; 
            while(x)*s1++=x%10+‘0‘,x/=10; 
            while(s1--!=s)out(*s1); 
         
        void println(int x) 
            static char s[15],*s1;s1=s; 
            if (!x)*s1++=‘0‘;if (x<0)out(‘-‘),x=-x; 
            while(x)*s1++=x%10+‘0‘,x/=10; 
            while(s1--!=s)out(*s1); out(‘\n‘); 
         
        void print(ll x) 
            static char s[25],*s1;s1=s; 
            if (!x)*s1++=‘0‘;if (x<0)out(‘-‘),x=-x; 
            while(x)*s1++=x%10+‘0‘,x/=10; 
            while(s1--!=s)out(*s1); 
         
        void println(ll x) 
            static char s[25],*s1;s1=s; 
            if (!x)*s1++=‘0‘;if (x<0)out(‘-‘),x=-x; 
            while(x)*s1++=x%10+‘0‘,x/=10; 
            while(s1--!=s)out(*s1); out(‘\n‘); 
         
        void print(double x,int y) 
            static ll mul[]=1,10,100,1000,10000,100000,1000000,10000000,100000000, 
                1000000000,10000000000LL,100000000000LL,1000000000000LL,10000000000000LL, 
                100000000000000LL,1000000000000000LL,10000000000000000LL,100000000000000000LL; 
            if (x<-1e-12)out(‘-‘),x=-x;x*=mul[y]; 
            ll x1=(ll)floor(x); if (x-floor(x)>=0.5)++x1; 
            ll x2=x1/mul[y],x3=x1-x2*mul[y]; print(x2); 
            if (y>0)out(‘.‘); for (size_t i=1;i<y&&x3*mul[i]<mul[y];out(‘0‘),++i); print(x3); 
         
        void println(double x,int y)print(x,y);out(‘\n‘); 
        void print(char *s)while (*s)out(*s++); 
        void println(char *s)while (*s)out(*s++);out(‘\n‘); 
        void flush()if (p1!=buf)fwrite(buf,1,p1-buf,stdout);p1=buf; 
        ~Ostream_fwrite()flush(); 
    Ostream; 
    inline void print(int x)Ostream.print(x); 
    inline void println(int x)Ostream.println(x); 
    inline void print(char x)Ostream.out(x); 
    inline void println(char x)Ostream.out(x);Ostream.out(‘\n‘); 
    inline void print(ll x)Ostream.print(x); 
    inline void println(ll x)Ostream.println(x); 
    inline void print(double x,int y)Ostream.print(x,y); 
    inline void println(double x,int y)Ostream.println(x,y); 
    inline void print(char *s)Ostream.print(s); 
    inline void println(char *s)Ostream.println(s); 
    inline void println()Ostream.out(‘\n‘); 
    inline void flush()Ostream.flush();
    #undef ll 
    #undef OUT_SIZE 
    #undef BUF_SIZE 
;

 为什么人家能$n^2$过百万系列

以上是关于极限IO优化的主要内容,如果未能解决你的问题,请参考以下文章

(转)io优化

硬件体系优化及IO优化核心优化原理详解

SQL优化原则

磁盘 IO 和网络 IO 该如何评估监控性能定位和优化

linux性能优化cpu 磁盘IO MEM

优化 Socket io [关闭]