[关闭]
@feiyangyang 2022-07-16T08:11:03.000000Z 字数 1125 阅读 304

常数优化

这个是最万恶有用的东西,养成习惯(虽然码风会变的很奇怪)

这只能怪一些数据太毒瘤,出数据者太卷,程序太神奇,评测机太慢……导致常数太大

而且不是总有人很良心给开(当然你的常数巨大就不能怨它),所以一门技术玄学就此诞生

1、

比较常用就不说了

2、关于函数

将一些东西函数化

比如一个很简单的例子:

还有:使用,可以更快

但对于一些时间复杂度大、递归的函数就没用,多用于简单、使用频繁的函数(当然全写上也没问题)

3、数据类型

快(慎用)

能用别用

似乎比

4、

用这个定义一些常量会快很多

5、计算

定义:

赋值也是计算对吧,我们可以这样:

当然仅限用于定义中

位运算:

这个东西还是蛮有用的

例1:

例2:

例3:

例4:

例5:

例6:

例7:

例8:

取模:

尽量少取模,这个复杂度大,这时最好配合循环外代

如果你很猛的话可以每次让加上8甚至25……不过对于一些题真的有奇效(

6、读入优化

这个应该是老朋友了,就是函数

7、吸氧

勇者的优化

火车头大法:在跨上火车头的一瞬间,你就变成了勇者/毕业生

8、压位

如果能用那么优化极大(看压的位数而言)

至于具体过程就比较简单,高精度中多次使用了

9、循环展开

当遇到时间复杂度高的运算时这个很有用,比如取模

举个例子:

某题

循环展开后的

就问你神不神奇

其实这题是有方法删一个的,但是这个卡常竟然过了,所以很牛皮

10、循环顺序

从小到大比从大到小要快,可以让矩乘原地起飞

11、

勇者的优化

查找某个元素的时候,先用判断是否存在这个元素,再询问

12、卡

连续多交几次就可以把卡了

![5 times Stu-con](C:\Users\Administrator\Desktop\infor\pic\5 times Stu-con.png)

虽然有的时候会失败,那是因为超时过头了

在超时限约​时可以上此法

13、循环外代

如果在循环里多次计算某数时间复杂度会很高,如:

现在把给搞出来就会变快:

14、循环分裂

你会发现循环总是恶心人,所以他的卡常方法就极其好用

把一个循环搞成两个循环,当然内容是一样的

某题

神奇吗?

15、打法选择

某些东西常数巨大,遇到毒瘤时就完蛋

若能用别的,如果不是特殊情况为什么要用呢???

例1:线段树->树状数组

例2:

还有,多项式算法常数巨大,暴力甚至更快……

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注