我在完成 此题 时出现了超时,使用众多卡常方式无果(记录)
同机房大神告诉我尝试交换枚举顺序
具体如下:
将
#define f(i,l,r) for(int i=(l);i<=(r);i++)
...
f(a,0,1)f(b,0,2)f(c,0,3)f(d,0,4)f(e,0,5)f(f,0,6)f(g,0,7)
f(a1,0,1)f(b1,0,1)f(c1,0,1)f(d1,0,1)f(e1,0,1)f(f1,0,1)f(g1,0,1)
...
改为
#define f(i,l,r) for(int i=(l);i<=(r);i++)
...
f(a1,0,1)f(b1,0,1)f(c1,0,1)f(d1,0,1)f(e1,0,1)f(f1,0,1)f(g1,0,1)
f(a,0,1)f(b,0,2)f(c,0,3)f(d,0,4)f(e,0,5)f(f,0,6)f(g,0,7)
...
实测本地效率快了一倍。
洛谷上 (#99) 780ms -> 413ms ,确实近乎快了一倍。(记录)
我认为这个现象对于优化时间常数很有用,想要深入了解,求各位进行讲解!