NJUCSE17

算法题常见错误汇总

2018-01-18 by Fancy

持续更新 & 欢迎疯狂评论补充
 
还可以看知乎问题 你在做算法题时遇到过哪些蜜汁错误?

智障型错误

1、m 写成 ni 写成 jv 写成 whead 写成 tail
2、< 写成 ><= 写成 <
3、int main() 写成 int mian()
4、scanf& (一般除了读字符数组都要加 &(这个不加会报 warning
5、输出 YES 还是 Yes 还是 yes
6、有的题目不忽略结尾的空格和回车

初学型错误

1、不写 using namespace std; 还不写 std::(私人建议不要 using namespace std;
2、忘了赋初始值、忘了清空数组
3、数组越界 & 循环边界判断
4、如何正确读入字符 & 字符串(参考上一篇题解

老司机也会挂

1、数组开小 or 开爆 (char & bool : 1 byte,int : 4 byte,long long : 8 byte,128M 可以开下 33554432 个 int
2、看数据范围开 long longint 最大 2147483647
3、int * int 赋值给 long long 的时候可能要强制转换
4、运算符优先级
比如加减乘除优先于左移右移(可以 mid = l + r >> 1
比较优先于位运算(不可以 if (x & 1 == 0)
5、STL 从 0 开始存
6、计算几何考虑除以 0
7、浮点数精度
8、if else{}

1
2
3
if (x) {
if (y) f1();
} else f2();

为了省括号写成了

1
2
3
if(x)
if (y) f1();
else f2();

操作系统&编译器不兼容

1、没有 #include <cstring> 然后 memset(Win 可以编译过,Linux 会 CE
2、保留字,如 pipetime(Win 可以编译过,Linux 会 CE
3、%lld%I64d

初学者的建议

1、认真阅读题意,看清数据范围
2、不要轻信样例,样例一遍很水,而且不包含特殊情况。如果 WA 了就自己造数据跑。
3、学会计算时间复杂度,1s 大概可以跑 500,0000
4、学会调试,如 gdb,或 IDE 自带调试,或 输出调试
5、写完题可以看看别人的代码,有时候可以学到一些有趣的 tips 以及代码风格。有的 OJ 可以看代码(UOJ、LOJ、51nod、COGS、luogu 等),或者网上可以搜到很多人的题解。
6、参考 Google 开源项目 C++ 风格指南

Tags: 编程