C/C++ 是一门很值得学习的语言,但里面有不少易错的地方,可能会让大家困扰不少,下面让我们一起来看看这些要注意的地方吧。
本文主要针对刷题的注意事项,但对其他人依然有不少参考性。
1. 注意 int 有没有越界,又或者 long long 会不会 MLE ( Memory Limit Exceeded 空间超限 )。
2. 使用 float 时小数精度可能不够,而使用 double 依然要注意空间问题。
3. 提交自己的代码时,一定不要提交调试信息(如中途输出等),否则会 WA,这样有可能罚分或罚时。
4. 注意数组与变量的初始化!(大多数情况下,全局数组 int / long long / float / double 默认为0)
5. 注意千万不要将 == 写成 =,否则肯定会出问题。
6. n 和 m 要分清!
7. for 循环时,注意多层循环要有不同的变量循环(不能总是 i ,否则肯定要出事),搞清楚是 ++ 还是 --。
8. 逻辑判断时,注意 < 与 <= 和 > 与 >=。
9. 如果觉得此段代码可能不再(或暂时)不需要了,应该将其注释,不应删除,以免后面可能再次使用。
10. 注意运算符优先序!
11. 看清楚题目要求的输出格式!(如 yes 与 Yes 与 YES 的区别)
12. 如果不知道那里有 bug,应分段调试,可以采用中间变量输出等方法。
13. 注意如果使用 scanf 输入,应加上 &,否则非法内存访问。
14. 如果 TLE ( Time Limit Exceeded 时间超限 ) 了,尝试加上(有时真的就 AC 了):
ios::sync_with_stdio(0); cin.tie(0);
或 ( ⬆️ cin,cout 加速 ⬇️ 手动开O2 )
#pragma GCC optimize(2)
15. 注意字符需使用单引号,字符串使用双引号。
16. 因为大多数评测机系统为 Linux,所以不要使用 windows 才可用的东西。(如 windows.h )
17. while 循环时注意循环变量一定要有变化,否则会死循环。
18. 运算时,做除法时,除数为0不会报错,但是取模时除数不可以为0,否则会运行时报错。
19. sort 排序时,若有多个相关量,应使用结构体。
20. 字符串下标从0开始,除非输入时为 cin>>s+1。
21. 起变量名时,应避免过于简单的名字,也避免其主流函数名(如 max, min,虽然用 namespace 后并不会出大问题,但也应该尽量避免)。
部分原文:
things to check 1. int overflow or long long memory need 2. recursion/array/binary search/dp/loop bounds 3. precision 4. special cases(n=1,bounds) 5. delete debug statements 6. initialize(especially multi-tests) 7. = or == , n or m ,++ or -- , i or j , > or >= , < or <= 8. keep it simple and stupid 9. do not delete, use // instead 10. operator priority 11. is there anything extra to output? 12. if you do not know where the bug is , try to clear some parts of the code and check each part seperately. something to think about 1. greedy? dp? searching? dp with matrix/ segment tree? binary search? 2. If contains "not", why not 正难则反 or few affect?



