IO最適化の限界

名前空間IO { 
    の#define BUF_SIZE 100000 
    の#define OUT_SIZE 100000 
    の#defineが長い長いっ
    // fread->読み取る
 
    BOOLのioerror = 0。
    インラインチャーNC(){ 
        [BUF_SIZE] BUF静的CHAR、* P1 = BUF + BUF_SIZE、* PEND = BUF + BUF_SIZE。
        IF(P1 == PEND){ 
            P1 = BUF。PEND = BUF +のfread(BUF、1、BUF_SIZE、STDIN)。
            (PEND == P1)場合{のioerror = 1、-1を返す;} 
            // {のprintf( "IOエラーを\ N!");システム( "一時停止");(;;)のために、出口(0);} 
        } 
        リターン* p1の++; 
    } 
    インラインブールブランク(チャーCH){戻りCH == ' '|| CH ==' \ n '|| CH ==' \ R '|| CH ==' \ Tを';} 
    インラインボイドリード(INT&X ){
        BOOL符号= 0。チャーCH = NC()。X = 0。
        用(;ブランク(CH)、CH = NC())。
        (例外IOError)の復帰であれば、
        IF(CH == ' - ')記号= 1、CH = NC()。
        用(; CH> = '0' && CH <= '9'; CH = NC())X = X * 10 + CH-'0' 。
        (記号)は、x = -xであれば、
    } 
    インラインボイド読み取る(LL&X){ 
        BOOL符号= 0。チャーCH = NC()。X = 0。
        用(;ブランク(CH)、CH = NC())。
        (例外IOError)の復帰であれば、
        IF(CH == ' - ')記号= 1、CH = NC()。
        用(; CH> = '0' && CH <= '9'; CH = NC())X = X * 10 + CH-'0' 。
        (記号)は、x = -xであれば、
    } 
    インラインボイドを読み取る(ダブル&X){ 
        BOOL符号= 0。チャーCH = NC()。X = 0。
        (例外IOError)の復帰であれば、
        用(; CH> = '0' && CH <= '9'; CH = NC())X = X * 10 + CH-'0' 。
        (CH == '')であれば{ 
            ダブルTMP = 1。CH = NC()。
            用(; CH> = '0' && CH <= '9'; CH = NC())TMP / = 10.0、X + = TMP *(CH-'0' )。
        } 
        (記号)は、x = -xであれば、
    } 
    インラインボイド(チャー*秒){読み取り
        チャーCH = NC()。
        用(;ブランク(CH)、CH = NC())。
        (例外IOError)の復帰であれば、
        (!;空白(CH)&&例外IOError;!CH = NC())* S ++ = CHため、
        * S = 0。
    } 
    インラインボイド読み取る(チャー&C){ 
        用(C = NC();ブランク(C)C = NC())。
        (例外IOError){C = -1であれば、返します。 
        Ostream_fwrite(){BUF =新しいCHAR [BUF_SIZE]; P1 = BUF;保留= BUF + BUF_SIZE;} 
        アウトボイド(チャーCH){ 
            IF(P1 == PEND){ 
                関数fwrite(BUF、1、BUF_SIZE、STDOUT ); P1 = BUF。
            } 
            * P1 ++ = CH。
        } 
        ボイドプリント(INT X){ 
            静的チャーS [15]、*、S1、S1 = S。
            (!x)は、* S1 ++ = '0'の場合、(x <0の)アウト( ' - ')の場合、X = -x; 
            一方、(X)* S1 ++ = X%10 + '0'、X / = 10。
            しばらく(S1 - = S!)アウト(* S1)。
        } 
        ボイドのprintln(INT X){ 
            静的チャーS [15]、*、S1、S1 = S。
            (!x)は、* S1 ++ = '0'の場合、(x <0の)アウト( ' - ')の場合、X = -x;
            一方、(X)* S1 ++ = X%10 + '0'、X / = 10。
            しばらく(S1 - = S!)アウト(* S1)。アウト( '\ n')で。
        } 
        ボイドプリント(LLのX){ 
            静的チャーS [25]、*、S1、S1 = S。
            (!x)は、* S1 ++ = '0'の場合、(x <0の)アウト( ' - ')の場合、X = -x; 
            一方、(X)* S1 ++ = X%10 + '0'、X / = 10。
            しばらく(S1 - = S!)アウト(* S1)。
        } 
        ボイドのprintln(LLのX){ 
            静的チャーS [25]、*、S1、S1 = S。
            (!x)は、* S1 ++ = '0'の場合、(x <0の)アウト( ' - ')の場合、X = -x; 
            一方、(X)* S1 ++ = X%10 + '0'、X / = 10。
            しばらく(S1 - = S!)アウト(* S1)。アウト( '\ n')で。
        } 
        ボイドプリント(二重のx、int型のY){
            MUL [] = {1,10,100,1000,10000,100000,1000000,10000000,100000000、LL静的
                1000000000,10000000000LL、100000000000LL、1000000000000LL、10000000000000LL、
                100000000000000LL、1000000000000000LL、10000000000000000LL、100000000000000000LL}。
            IF(X <-1E-12)アウト( ' - ')、X = -x; X * = MUL [Y]。
            LL×1 =(LL)床(X)(X-床(X)> = 0.5)++ X1場合。
            LLのX2 = X1 / MUL [Y]、X3 = X1-X2 * MUL [Y]。印刷(×2)。
            もし(Y> 0){OUT( ''); (i = 1からsize_tのうち( '0')、++ I; iがMUL [I] <MUL [Y] * Y && X3を<)のために、プリント(X3);} 
        } 
        ボイドのprintln(ダブルのx、int型のY){プリント(x、y)は、OUT( 'の\ n');} 
        ボイドプリント(チャー*秒){(* S ++(* S)うち一方);}
        ボイドのprintln(チャー*秒){ながら(* S)OUT(* S ++);アウト( 'の\ n');} 
        ボイドフラッシュ(){IF(!P1 = BUF){関数fwrite(BUF、1、P1-BUF 、STDOUT); P1 = BUF;}} 
        〜Ostream_fwrite(){ フラッシュ();} 
    }のostream。
    インラインボイドプリント(INT X){Ostream.print(x);} 
    インラインボイドプリント(チャー*秒){Ostream.print(S);} 
    インラインボイドのprintln(チャー*秒){Ostream.println(S);} 
    インラインボイドのprintln(){Ostream.out( 'の\ n');} 
    インラインボイドのprintln(INT X){Ostream.println(X)。
    インラインボイドのprintln(チャーX){Ostream.out(X); Ostream.out( 'の\ n');} 
    インラインボイドプリント(LLのX){Ostream.print(x);} 
    インラインボイドのprintln(LL x)から{ Ostream.println(x);} 
    インラインボイドプリント(二重のx、int型のY){Ostream.print(X、Y);} 
    インラインボイドのprintln(ダブルのx、int型のY){Ostream.println(X、Y);}
    インラインボイドフラッシュ(){Ostream.flush();} 
    #undefのLL 
    の#undef OUT_SIZE 
    の#undef BUF_SIZE 
}。

 なぜ人々は、n ^ 2 $百万シリーズを$することができます

おすすめ

転載: www.cnblogs.com/Rorschach-XR/p/11620358.html