作者:seoer | 来源:互联网 | 2023-06-05 12:58
某天,看到这样一个场景(要求时限3000ms)是不是突然很想骂人?不过,以下一些知识可能帮到你教你如何卡常(c++)(我太弱了,大佬勿喷)1.相信你们都知道for(inti1;i
某天,看到这样一个场景(要求时限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.尽量用位运算 (懒得打到刚才那个程序里去)(实际上我不大会)
9.数组尽量不要是偶数个数的(原因不明)
偶数个数后满了3ms(有时候会慢很多)
10.把循环给尽量展开,速度会快很多
11.尽量消除条件的跳转
12.访问a[i]后访问a[i+1],a[i+2]等会快很多
希望以上技巧对你有帮助
卡常技巧