一些技巧&套路&注意事项 (持续更新)

本文分享了比赛做题的技巧和注意事项,包括转化问题、边界条件检查、使用剪枝优化搜索、合理分配时间和资源等。同时强调了理解题目、避免主观臆断以及正确评估算法效率的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

比赛做题其实有很多的技巧和套路,还有一些奇奇怪怪需要注意的地方。

在这里,我就根据自己的经验来写一写。

 

这会是一个很大的坑。

等着以后慢慢填吧。

 

虽然说这主要是写给自己看的,

但还是希望大家看完后觉得好的点个赞。

 

正文:

1、求[l..r]方案数的一般都是转化为[1..r]-[1..l-1]。

 

2、c++很少会给你报错,所以要自己注意数组是否会越界,要不要开long long。

 

3、一些神奇的思维转换,比如说不能的个数=总数-能的个数。

 

4、打二分时要多调试几遍。

 

5、比赛时注意题目难度,一般第一题要努力想正解,第二题、第三题就尽力拿部分分。

 

6、比赛时注意时间分配,一般做一题最好不要超过一个小时,想不到正解就打暴力。

 

7、一些看上去超时的搜索在加上剪枝后能拿到很多分甚至能切掉,所以搜索要尽量打剪枝。

 

8、只要有区间覆盖的,都应该想一想差分。

 

9、不要主观臆断一个算法会超时,有些东西真的很玄学。

 

10、注意数据范围内那些奇怪的特殊数据,有时用它们来打表也可以得分,相反不注意这些的话打了正解也可能失分。

 

11、c++中位运算的优先级很低,所以最好加括号。

 

12、做题要多看几遍题目,想做法时样例要先弄懂。

 

13、有些要取模的题在卡常时可以隔几个去一次模,因为取模真的很慢。

 

14、调用数组也比较慢,至少比直接用变量慢,所以卡常时能用变量就别调用数组。

 

15、在要重复执行很多次的程序段中,最好要打得能优则优,能简则简,因为有时可能一个符号就决定你超不超时。

 

16、数组整体赋值(c++的memset,pascal的fillchar)要比用循环去赋值快一些,但也是需要较多的时间,所以能减则减。

 

17、在空间允许的情况下,不要吝啬开long long耗费的空间,感觉数值可能比较大就开long long,即使在你的估计中它不会超过2^31-1,毕竟你可能会估算错。

 

18、遇到实数类型就直接用double(pascal的extended),以防被卡精度。

 

19、线段树空间要开4n。也就是说100000个数你要开到400000的空间来存。

 

20、数据很大好像只能O(1)过的一般都是公式结论题,推不出公式可以打个暴力来找规律。

 

21、数组大小很神奇,不一定是数据越小就越快。有一次同样的程序我数组开到[1001][1001]比开到[42][22]要快很多,差不多快了整整半秒,而且重复提交多次也一样。

22、循环比较慢,所以能用一个循环做完的东西就不要分到两个循环做,尽量在一个循环里做完。有时还可以考虑这样优化一个1到n的循环:

for (int i=1;i<=n;i+=16)
{
    一次性做完i到i+15的东西。
}

这样就减少了循环次数,也是一种卡常。

23、求最小最大时想二分

24、随机数一定要开cstdlib!sqrt一定要开cmath!虽然在编译器上只开algorithm也可以通过,但交上去会错。(记不清就最好都开嘛

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值