代码查错
- 认真读题,比如题目的数据范围。
- 观察每个变量名是否有误,每个类型是否有误,每个运算符是否有误(<,>,=,+=),规定的输出格式是否有误。
- 考虑边界情况,0,1,-1,上限,下限。
- 与序列有关的题目要分清楚变量表示的是值还是下标。
- 考虑算法是否有误。
- 更改写法,选择更不易错的方法去写题。
- 推导排列的问题,注意如果已经推导出了n-1项,那么最后一项也就出来了。
- 常量数组是否有误
- 运算是否爆范围.
- 输出方案提前判断是否有解.
- 求两数的差是否写abs
- 定义全局变量后又定义局部变量,导致作用域覆盖.
vc.size()-5
,无符号类型直接减字面值可能会减出bug来。- 两个dfs,dfs2中递归注意是否写成dfs。
思路引导
- 认真读题
- 当输入数据范围很大但有除法关系时,可以考虑分类。
如输入n,m<=1e9,可以枚举1<=n<=1e5,剩余的枚举 m/n. - 输入数据与输入顺序无关时,直接排序,不管为什么。
- 遇事不决写暴力,尤其是数学题。
- 把问题要求的算式列出来,然后用数学的方式去推导,会比空想有效很多。
- 和区间求和有关的东西,上前缀和,推导算式,差分同理。
- 二分性质。
- 反向求解。
- 观察结果的统一性,通过枚举结果将状态数缩小(旋转游戏)。
- 枚举不变量(三角形最长边)。
编码建议
- 模拟题在上手之前提前想好数据结构与算法流程。
- 当调用元素本身太麻烦(耗时久,不好表示,多维数字)时,建立索引。
- 先写出能用的程序,思路会在写的过程中不断清晰,记住提前优化是万恶之源。
其它
不要去2019年还不支持C++11的OJ写题(说的就是你,就是POJ),如果上面有想做的题直接在vjudge上搜题名,绝大部分题都能在其它OJ上搜到,如果实在没有就不做了,不值得。
应当对罚时报以警惕,在正式比赛中,提交前要通篇浏览代码。如果出现1次WA,即使找到了错误也要让另外的队友全篇看一遍。