C++ 讀入優化 fread()版本
阿新 • • 發佈:2019-02-17
今天被讀入優化坑慘了
因為一道隨便水水就能過的屎題,調了一下午我一直以為是我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;
}