365bet外围网站-约彩365安卓版本-365dni是真的吃吗

卡常技巧

卡常技巧

某天,看到这样一个场景(要求时限3000ms)

是不是突然很想骂人?

不过,以下一些知识可能帮到你

教你如何卡常(c++)(我太弱了,大佬勿喷)

1.相信你们都知道 for(int i=1;i<=n;i++),改为++i更快

然后发现照样没快多少(哎~~)

怎么办呢?

2.相信你们还是知道 把诸如int a=1 改为 int a(1) 更快

发现自己少了一百多毫秒,但依然T了

这时候

3.相信你们依然知道 在函数前加inline可以加快(可能不会吧)

4.在int前加register(这个也很基本吧)

于是乎愉快地A了

再想想还有什么你知道的卡常?

5.重要的一点--读入优化(应该都知道)

void read(int &x)

{

int f=1;

x=0;

char s=getchar();

while(s<'0'||s>'9')

{

if(s=='-')

f=-1;

s=getchar();

}

while(s>='0'&&s<='9')

{

x=x*10+s-'0';

s=getchar();

}

x*=f;

}

又快了一些。

6.能不用变量就不用,转而用常量(大部分人也知道吧)

7.取模用减法代替

ll mo(ll x,ll y)

{

return x+y>=mod?x+y-mod:x+y;

}

8.尽量用位运算

比方说:

a%2改为a&1

a*2改为a<<1

a*2+1改为a<<1|1

9.数组尽量不要是偶数个数的(原因不明)

偶数个数后满了3ms(有时候会慢很多)

10.把循环给尽量展开,速度会快很多

如:把for(int i=1;i<=n;++i) a=1,b=1;

改为for(int i=1;i<=n;++i)a=1;

for(int i=1;i<=n;++i)b=1;

11.尽量消除条件的跳转

12.访问a[i]后访问a[i+1],a[i+2]等会快很多

13.尽量不要用algorithm中的自带函数(除sort等)

希望以上技巧对你有帮助