持续更新 & 欢迎疯狂评论补充
还可以看知乎问题 你在做算法题时遇到过哪些蜜汁错误?
智障型错误
1、m
写成 n
,i
写成 j
,v
写成 w
,head
写成 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 long
(int
最大 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
3if (x) {
if (y) f1();
} else f2();
为了省括号写成了1
2
3if(x)
if (y) f1();
else f2();
操作系统&编译器不兼容
1、没有 #include <cstring>
然后 memset
(Win 可以编译过,Linux 会 CE
2、保留字,如 pipe
、time
(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++ 风格指南