lizbaka的犯蠢记录
犯蠢合集,今日最乐
变量重名
应当尽可能地使变量名包括函数名有意义,分清各变量的意义
必要时可以使用namespace进行区分以尽可能避免撞车
树链剖分,查询操作跳跃节点判定
以下是错误代码
1 | //...... |
以下是正确代码
1 | //...... |
节点在往上跳的时候,是直接跳到所在链的链顶的,应当比较两个节点所在链的链顶节点之深度,使更深者往上跳
如按照错误代码书写,可能导致跳跃过度从而造成答案计算重复(计算了多余的节点)
树形数据结构查询K小值,向右子树查询时的问题
常出现于平衡树,权值线段树等问题中
令等于当前节点的左儿子管辖范围内元素个数
若通过查询得知小值不在左子树中,向右子树递归
此时应注意进入下一层递归后,应修改的值为以在右子树中获得正确的答案!
判断结构和循环结构下的逗号与压行问题
逗号和压行可以令代码看上去更加简洁
但在使用时应当十分谨慎,在判断结构和循环结构中使用时更应注意结构的有效范围
if后面出问题是绝对调不出来的
FFT/NTT等数组大小的问题
由于需要将多项式扩展到项,因而数组大小至少要开到倍
SAM的状态数问题
后缀自动机的状态数是的,所有与状态数有关的数组都要开两倍大小,或者索性把maxn设成两倍
树形数据结构的标记上传和下传问题
时刻注意操作前/后是否需要进行信息上传/下传,如线段树,LCT,splay等都需要格外注意
Manacher的特殊字符插入
插入特殊字符时,必须使原字符串中的所有字符两侧均有特殊字符,并且字符串数组前必须插入一个更加特殊的字符
因此,插入特殊字符后的串必须从1开始存储
例子:
1 | scanf("%s",in+1); |
本博客所有文章除特别声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来自 lizbaka的博客!
评论