【总结】经验与教训

代码查错

  1. 认真读题,比如题目的数据范围。
  2. 观察每个变量名是否有误,每个类型是否有误,每个运算符是否有误(<,>,=,+=),规定的输出格式是否有误。
  3. 考虑边界情况,0,1,-1,上限,下限。
  4. 与序列有关的题目要分清楚变量表示的是值还是下标。
  5. 考虑算法是否有误。
  6. 更改写法,选择更不易错的方法去写题。
  7. 推导排列的问题,注意如果已经推导出了n-1项,那么最后一项也就出来了。
  8. 常量数组是否有误
  9. 运算是否爆范围.
  10. 输出方案提前判断是否有解.
  11. 求两数的差是否写abs
  12. 定义全局变量后又定义局部变量,导致作用域覆盖.
  13. vc.size()-5,无符号类型直接减字面值可能会减出bug来。
  14. 两个dfs,dfs2中递归注意是否写成dfs。

思路引导

  1. 认真读题
  2. 当输入数据范围很大但有除法关系时,可以考虑分类。
    如输入n,m<=1e9,可以枚举1<=n<=1e5,剩余的枚举 m/n.
  3. 输入数据与输入顺序无关时,直接排序,不管为什么。
  4. 遇事不决写暴力,尤其是数学题。
  5. 把问题要求的算式列出来,然后用数学的方式去推导,会比空想有效很多。
  6. 和区间求和有关的东西,上前缀和,推导算式,差分同理。
  7. 二分性质。
  8. 反向求解。
  9. 观察结果的统一性,通过枚举结果将状态数缩小(旋转游戏)。
  10. 枚举不变量(三角形最长边)。

编码建议

  1. 模拟题在上手之前提前想好数据结构与算法流程。
  2. 当调用元素本身太麻烦(耗时久,不好表示,多维数字)时,建立索引。
  3. 先写出能用的程序,思路会在写的过程中不断清晰,记住提前优化是万恶之源。

其它

不要去2019年还不支持C++11的OJ写题(说的就是你,就是POJ),如果上面有想做的题直接在vjudge上搜题名,绝大部分题都能在其它OJ上搜到,如果实在没有就不做了,不值得。

应当对罚时报以警惕,在正式比赛中,提交前要通篇浏览代码。如果出现1次WA,即使找到了错误也要让另外的队友全篇看一遍。

你可能感兴趣的:(总结)