天天看點

C++ 讀入優化 fread()版本打ACM用的二逼I/O

  • 今天被讀入優化坑慘了
  • 因為一道随便水水就能過的屎題,調了一下午我一直以為是我STL的鍋。
  • 以後校OJ上讀入量超過10mb的題目,不寫這個優化,我名字倒着寫…

版本1

#include<cstdio>
#include<iostream>
using namespace std;

const int maxx=;
char Input[maxx+],*ipos;
#define read() (strtol(ipos,&ipos,10))

int main() {
    fread(Input,maxx,,stdin);ipos=Input;
    int n=read();

    //Do something......

    return ;
}
           

版本2

const int STRSIZE=int();
char in1[STRSIZE];
char *in=in1, *tempend;
void Input() {
    tempend=in+STRSIZE;
    fread(in,,STRSIZE,stdin);
}
inline void scan(int &x) {
    char c=*(in++);
    while(!(c>='0' && c<='9')) c=*(in++);
    x=c-'0';
    c=*(in++);
    while(c>='0' && c<='9') {
        x=x*+c-'0';
        c=*(in++);
    }
}
           

打acm之後用的

#include <bits/stdc++.h>
using namespace std;

const int BUF=;
char Buf[BUF], *buf=Buf;
inline void read(int& a) {for(a=;*buf<;buf++); while(*buf>) a=a*+*buf++-;}

void work() {



}

int main() {
#ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
#endif
    fread(Buf,,BUF,stdin);
    int T;
    for(read(T);T;T--)
        work();

    return ;
}
           

打ACM用的二逼I/O

inline int read() {
    register int val=, sign=; char ch;
    while(~(ch=getchar()) && (ch<'0' || ch>'9') && ch!='-'); ch=='-'?sign=-:val=ch-'0';
    while(~(ch=getchar()) && (ch>='0' && ch<='9')) val=(val<<)+(val<<)+ch-'0';
    return val*sign;
}
           
C++ 讀入優化 fread()版本打ACM用的二逼I/O

繼續閱讀