输入输出优化在输入输出几十万,几百万的数据时会有几百ms的优势。
一般来说我们读入都用的scanf和cin,实在必要的时候可以用getchar读入优化。
然后众所周知,cin比scanf慢,getchar最快。
https://blog.csdn.net/liyizhixl/article/details/54412459
位运算加速:(re<<1)+(re<<3)==re*10;
输入优化:
char buffer[maxn],*S,*T;
inline char Get_Char() //字符型变量优化
{
if(S==T)
{
T=(S=buffer)+fread(buffer,1,maxn,stdin);
if(S==T) return EOF;
}
return *S++;
}
inline int Get_Int()//整形变量优化
{
char c;
int re=0;
for(c=Get_Char();c<'0'||c>'9';c=Get_Char());
while(c>='0'&&c<='9')
re=(re<<1)+(re<<3)+(c-'0'),c=Get_Char();
return re;
}
//(re<<1)+(re<<3)==re*10;
/*int read()//整形变量优化
{
int ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
while(ch>='0'&&ch<='9') ret=ret*10+ch-48,ch=getchar();
return ret*f;
}*/
inline double dbread()//实数变量优化
{
double X=0,Y=1.0; int w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=X*10+(ch^48),ch=getchar();
ch=getchar();//读入小数点
while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
return w?-X:X;
}
输出优化:
inline void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}