代码中经常犯的错误

调题的思考

能够确定自己的代码不犯SB错误,那么可以从算法漏洞开始思考,大大节省调试时间!

一定要在写的时候把标号对应清楚、字符不要打错、数组开够、inf和初值设对。渐渐养成习惯。可以减少很多调试。
调试的时候先检查这些杂事杂项,然后通读代码检查算法。
应该逐渐把调试重点放在题目和算法上

搜索/dfs

层与层之间数组混用
回溯后没有清空或者还原
边界条件设置错误
vis标记打错

数据结构

分块:
每个点对应的块,如果下标从一个开始,是ceil(i / sz)
修改区间在用一块要特判!
常数需要优化!

set:
不会用复杂的动态修改,判end和begin经常漏掉情况

DP

边界条件
不合法状态经常忘设-inf
转移方程没有推清楚,漏掉几种转移

一、多组数据
1. 清空到n + 1,要用边界外的值时,直接memset或者for的时候注意多for一点
2. 清空数组直接全部清掉。不要吝惜一点复杂度。(全清无脑)
3.
二、 提交错误
1. 记得去文件操作
2. 数据范围看清,个别数组没有开够
三、 stl使用
1. set等end没有存值,begin有值。set.erase左闭右开
2.
四、 代码sb错误
1. 不注意,变量sb打错
五、没有想清楚细节就开始写
1. 写dp前必须推清楚dp所有转移
2. 推式子的题,必须把式子完全推清楚再写(包括边界情况)
3. 想好需要实现的东西,或者需要使用的数据结构!

队伍注意事项:
注意!!

  1. 看题感觉奇怪 一定要看样例解释!!!看完题面要养成看样例的好习惯

  2. 使用python计算数组大小时,不妨直接复制结果到代码里。而不是数位数。

  3. 写代码前把每一个细节想清楚,不能感觉正确(今天的cdq分治对于重复数字就没有想清楚)

  4. 训练前留出5min调整好状态,不要匆忙开始训练

  5. 结论题,大胆才结论,特别是看到很多人都过了。应该意识到做法没有这么难(今天I)

读题步骤

  1. 读清楚题意,不要漏掉条件

  2. 手跑样例,确认题意

  3. 看清数据范围,尤其是特殊限制的情况。不要漏掉数据限制,否则简单题就变神题了!

  4. 题意不太清楚和队友确认题意

  5. 自己没有太多想法和队友一起讨论,不要一个人自闭的想太久!

写题前必须经历的步骤
6. 再次确认题意,模拟样例!

  1. 自己确认做法,认真静下来想,一定不能觉得自己显然是对的或者可能是对的就开始写。必要时找队友确认(只要不是一眼签到都应该和队友确认)

  2. 理清楚代码中的细节,程序实现流程,模块,边界条件,如果是推式子的题再推一遍式子,并想想边界情况和分类讨论的情况

  3. 如果需要抄模板,先熟悉看懂模板再抄

  4. 写完代码先自己通读一遍。再gdb调试和提交

  5. 看清需不需要加文件

调题顺序
12. 先检查数组大小

  1. 检查是否正确清空数组

  2. 检查输入输出格式,n和m是否读反等

  3. 看题目边界数据点是否考虑到

  4. 静心阅读自己的代码,想想每个细节是否写对,不要盲目相信自己的代码一定是对的。要边读边思考,任何地方都可能出错

  5. 可以对拍,并且不太麻烦立即对拍。

  6. 和队友确认算法,寻求队友帮助,在自己束手无策的时候一定不要坚持自己调。这时一定要找队友的帮助。

  7. 两个队友调不出来,找第三个队友

  8. 先放下来,等开出其他题,冷静一下再调

杂事杂项

  1. 最后几分钟写题的时候不要因为压力大就放弃思考开始无谓地gdb,没啥意义。

  2. 关键细节想清楚之后再上去写题。

  3. 多项式乘法在数据范围较小的时候可以暴力算以提高精度。FFT做完乘法之后的那个数组里的虚部记得清。

  4. 第一发不要交任何含有assert的代码,调不出来开始爆OJ了再交。

比赛前准备

  1. 测试栈大小
  2. 测试评测机速度 排序,取模运算
  3. 测试评测机是否开O2
  4. 测试评测机是否支持int128,float128
  5. 查看编译选项中是否有python和java
  6. 看所有训练的trac,回忆每场比赛流程,思考犯的错误
  7. 看所有注意事项
  8. 比赛开始前静心思考比赛注意事项。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值