有关读入优化的基本操作

David_Liu

2018-10-10 20:32:15

Personal

作为一个~~蒟蒻~~OIer,最常规的~~卡常~~优化操作就是读入优化了,在学习读入优化的时候,先从最基本的read开始吧! 不多说,上代码: ```cpp int read() { int ret = 0, f = 1; char s = getchar(); while(s < '0' || s > '9') { if(s == '-') f = -1; s = getchar();} while(s >= '0' && s <= '9') {ret = ret*10 + s^'0'; s = getchar();} return ret; } ``` 这时候有些同学便会认为read实在是来~~蒟蒻~~简单了,于是来看一下fread的操作吧! 上代码: ```cpp # define bin(n) (1 << n) const int BUF = bin(20); char buf[BUF], *fs, *ft; inline char getc() { if(fs == ft) { fs = buf; ft = fs + fread(buf, 1, BUF, stdin); if(ft == fs) return EOF; } return *fs++; } int read() { int ret = 0, f = 1; char s = getc(); while(s < '0' || s > '9') { if(s == '-') f = -1; s = getc();} while(s >= '0' && s <= '9') {ret = ret*10 + s^'0'; s = getc();} return ret; } # undef bin ``` 这时候又会有一些~~神犇~~同学认为,这种写法~~不符合自己的身价~~太过直白,于是便有了自定义命名空间的操作,上代码: ```cpp namespace IO { # define bin(n) (1 << n) const int BUF = bin(20); char buf[BUF], *fs, *ft; inline char getc() { if(fs == ft) { fs = buf; ft = fs + fread(buf, 1, BUF, stdin); if(ft == fs) return EOF; } return *fs++; } int read() { int ret = 0, f = 1; char s = getc(); while(s < '0' || s > '9') { if(s == '-') f = -1; s = getc();} while(s >= '0' && s <= '9') {ret = ret*10 + s^'0'; s = getc();} return ret; } # undef bin } using IO::read; ``` 嗯,鉴于~~本蒟蒻太蒟~~读入优化的基本操作已经讲完了,大抵就先讲到这里吧,祝大家神犇路上走得愉快!