【每天一个爆零小技巧】个人用的常数小技巧_自用

  • 不论整数,浮点数,除法是真的慢
  • 整数取模尽量避免,这也是大部分程序的卡常关键
  • 要尽可能让几次对一个数组的调用地址距离近。比如\(f_{i,j,k}\)中,大部分运算是在相同的\(i,k\)下做的,那么我们应该存为f[i][k][j]。
  • 一个优秀的快读快输很有必要
template<typename T>void Read(T &cn)
{
	char c; int sig = 1;
	while(!isdigit(c = getchar())) if(c == '-') sig = -1; cn = c-48;
	while(isdigit(c = getchar())) cn = cn*10+c-48; cn*=sig;
}
template<typename T>void Write(T cn)
{
	if(cn < 0) {putchar('-'); cn = 0-cn; }
	int wei = 0; T cm = 0; int cx = cn%10; cn/=10;
	while(cn) wei++, cm = cm*10+cn%10, cn/=10;
	while(wei--) putchar(cm%10+48), cm /= 10;
	putchar(cx+48);
}
  • 一个优秀的快速幂也比较有用
LL ksm(LL cn, LL cm) {LL ans = 1; while(cm) ans = 1ll*ans*(1+(cn-1)*(cm&1))%MOD, cn = cn*cn%MOD, cm = cm>>=1; return ans; }
  • 循环展开是最后的计策
  • memset,最好算好要用前多少位,然后精确清零
  • 正确分析好程序的复杂度瓶颈,然后只在瓶颈上优化,除非其它地方优化起来太方便了,可以顺手搞一下

猜你喜欢

转载自www.cnblogs.com/czyarl/p/12985304.html