有关读入优化的基本操作
David_Liu
2018-10-10 20:32:15
作为一个~~蒟蒻~~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;
```
嗯,鉴于~~本蒟蒻太蒟~~读入优化的基本操作已经讲完了,大抵就先讲到这里吧,祝大家神犇路上走得愉快!