套路/错误集/黑科技/好写法

本文总结了一系列编程技巧和解决常见问题的方法,涵盖了算法优化、数据结构应用、字符串处理等多个方面,帮助读者提升编程效率和质量。

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

QAQ因为我写代码太不稳了感觉写一下错一下所以在这里记一记犯过的错误(包括解题、打程序和调试中的问题)

解题

综合

1.不要以为一个算法会TLE就不去想,说不定可以优化?说不定可以卡过去?而且一定要记得写暴力,尽可能少用STL(范围大的时候……STL太容易被卡掉了)
2.尽可能化简式子,找规律
3.利用约束,简化状态,将思路归到一起(例如双路DP规定一边推导方向,min(x,y)按照xy的大小关系分类推算从而将某个数向外层求和/积符号推)
4.写程序一定要模块化地写,如果写不过尝试下每个模块去测(特别是数据结构部分),或者如果正解是暴力扩展之类的情况,可以从暴力上去一点一点改
5.将4发挥到更加极致的地步,尽可能用一系列read(),solve()等等组成主函数,实际过程在各个函数中写,分而治之,主函数中仅为调用

数论题

1.一定要记得打表,当实在做不出来的时候要找找规律然后再想想怎么解释
2.熟记基本函数性质,一看到题目先想想会涉及到那些函数,不要随便上反演,因为可能有更简单的做法,推反演的时候也尽可能凑一下基本函数
3.如果这个函数很难求(数据范围非常大等等),看看关于他的约数的函数怎么求,然后反演一发
4.反演的时候有时候要记得将一些数论函数展开然后再去枚举约束……
5.如果发现有像[ni][mj]这样的形式,一般就是可以利用取值最多O(n+m)种的性质来分块考虑,前缀和一波其他剩下的函数然后搞

规划题

1.先看一眼有什么样的序的关系,然后利用这个序去写约束,看清楚要求什么样方向的最大/小
2.一般稍微读懂题意之后可以稍微分一下类(同样,还可以按照数据范围),即动态规划类、线性规划类(单纯形、网络流、二分图模型……),然后再继续考虑优化
3.动态规划类,包括贪心和其余的若干DP,贪心分成(正确的、有理有据的)普通贪心,以及乱搞贪心,乱搞贪心稍后再讲
4.普通贪心,由于凭直觉推断出是局部最优=全局最优,那么我们一般就是进一步推进偏序关系,例如直接排序/取最值,然后通过分析可得到相应的推法
5.DP有很多模型,下面逐一讲,这里先写通用的
实际上DP和贪心一样,都是需要一个序才能够用来推,一定要注意方程推导的顺序才能无后效性,不重复、不遗漏

搜索题

1.一般发现题目很难做,感觉不可维护的规划类题目就马上想到搜索了,而搜索一般来说在coding和剪枝上非常坑
2.如果要写搜索,一定要先看清楚题目给了什么条件,然后想想怎么写好一点,不要一拿到题目就直接开写
3.首先看看能不能状压DP,打搜索的时候顺手加上最优化剪枝,观察题目性质(随便贪心)去构造一些看上去挺优的解也行,甚至可以随机化构造

数据结构题

1.尝试分析化简,将题目中所要维护的东西转成好维护的,或者看看有没有什么结论(参见某道区间中取斜率最大的题目,那个一定要是相邻的)
2.考虑数据结构,能用简单的就不用复杂的,一般BIT/STL类<线段树<分块

计数类题

1.计数题非常的烦,因为一般不可能枚举掉所有情况来计算,必须要数学推公式,然后各种套算法才能做,一般就是组合数学+递推(矩阵快速幂优化转移),有的时候是某种暴力方法结合组合数学优化
2.式子推出来之后先小范围手算一下对不对再打程序,递推的时候也想想边界情况,数组最好从1开始算(为了边界更好写)
3.区间上方案数的问题尽可能想想结论,一般套路可能是离线之后分治,用递推去搞,也可能是线段树上一下子记很多个信息来推。总之一定要先想好没有区间的版本再去扩展,这样再不济也能打个暴力……

错误集

字符串题

1.KMP写的时候一定要记得初始化,要记得题目要求的坐标从1开始还是从0开始
2.尽可能写熟练的算法,例如KMP,SA之类的,后缀自动机,AC自动机因为不那么熟练尽可能比赛时不用

字符串题

1.线段树统计答案的时候最好把子节点再暴力下传下……

图论题

1.网络流建反向边,所以边数要开两倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值