读入优化
inline int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
inline ll read(){
ll s = 0, w = 1; char ch = getchar();
while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }
while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
return s * w;
}
输出优化(一般不需要)
稍慢(有递归)
inline void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
模块化设计
template<class T>inline void read(T &x)
{
x=0;register char c=getchar();register bool f=0;
while(!isdigit(c))f^=c=='-',c=getchar();
while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
if(f)x=-x;
}
template<class T>inline void print(T x)
{
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar('0'+x%10);
}
卡常技巧
ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
- 需要时,可在声明函数之前写上
inline
- 尽量减少值传递,多用引用来传递参数
- 有时间可以手写STL库函数
- 需要时,可在定义变量前写上
register
- 使用局部变量的效率比使用静态变量要高
- 不要开
bool
(占一个字节),所有bool
改成char
,int
是最快的(原因不明)。 - 尽量不用
double
,能用char
就别用string
。 - 对于一个值的重复运算,存入临时变量中。
- 等等等