整型快读
就是简单的普通快读, 读int类型
getchar()就是将数字当字符读取,比scanf快
w就是用来判断数字是不是负号,
如果想的话可以再压一下行
如果读懂了很快就能自己打出来
inline void read(int &x){
int s = 0, w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar(); }
while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
x = s*w;
}
普通快读有升级版啦
考完试看机房大佬的代码看见的,一直想学的template写的快读(其实也没差多少)
就是将之前的变量声明用template代替,这样我们就不用担心读入数据会不会爆int的问题;
过了好长时间我快读也变了不少
#define gtc() getchar()
template <class T>
inline void (T &s){
T w = 1, ch = gtc(); s = 0;
while(!isdigit(ch)){if(ch == '-') w = -1; ch = gtc();}
while(isdigit(ch)){s = s * 10 + ch - '0'; ch = gtc();}
s *= w;
}
字符串快读
当字符串量特别大时,可以用这个优化
inline string read(){
char ch = getchar();
string st1 = "";
while(!(ch >= 'a' && ch <= 'z')) ch = getchar();
while(ch >= 'a' && ch <= 'z') st1 += ch, ch = getchar();
return st1;
}
当然我们也可以换成char型数组的读入,scanf读这个还是很快的
char s[100010]
int main()
{
scanf("%s", s);
return 0;
}
懒人(假)快读?
1)
#define read(n) scanf("%d", &n);
2)
inline int read(){
int x;
cin>>x
return x;
}
这个叫做写的更快的读入,也叫快读,嗯。