1. 程式人生 > >C++ 讀入優化 fread()版本

C++ 讀入優化 fread()版本

  • 今天被讀入優化坑慘了

  • 因為一道隨便水水就能過的屎題,調了一下午我一直以為是我STL的鍋。

  • 以後校OJ上讀入量超過10mb的題目,不寫這個優化,我名字倒著寫…

版本1

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

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

int main() {
    fread(Input,maxx,1,stdin);ipos=Input;
    int
n=read(); //Do something...... return 0; }

版本2

const int STRSIZE=int(4e7);
char in1[STRSIZE];
char *in=in1, *tempend;
void Input() {
    tempend=in+STRSIZE;
    fread(in,1,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*10+c-'0'; c=*(in++); } }

打acm之後用的

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

const int BUF=40000000;
char Buf[BUF], *buf=Buf;
inline void read(int& a) {for(a=0;*buf<48;buf++); while(*buf>47
) a=a*10+*buf++-48;} void work() { } int main() { #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); #endif fread(Buf,1,BUF,stdin); int T; for(read(T);T;T--) work(); return 0; }

打ACM用的二逼I/O

inline int read() {
    register int val=0, sign=1; char ch;
    while(~(ch=getchar()) && (ch<'0' || ch>'9') && ch!='-'); ch=='-'?sign=-1:val=ch-'0';
    while(~(ch=getchar()) && (ch>='0' && ch<='9')) val=(val<<1)+(val<<3)+ch-'0';
    return val*sign;
}

這裡寫圖片描述