常见错误汇总

XyzL

2020-10-26 17:28:18

Personal

吾日三省吾身,为变量而不初始化乎?与大数算而不 ```long long``` 乎?不写文件乎? [部分参考](https://wenku.baidu.com/view/00dd9b760a4e767f5acfa1c7aa00b52acfc79ca0.html) # 低级错误: ## 1.文件读入问题 ### 错误样例1:字符拼错 ![](https://cdn.luogu.com.cn/upload/image_hosting/qyrx36h1.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/2i0yock4.png) 这种情况建议,即使对自己英文水平再自信,也建议复制一遍 。 ### 错误样例2:未开子文件夹 如果是提交文件夹的话,实在不清楚要不要开子文件夹,那就将代码在子文件夹内外**存两份**。 ### 错误样例3:文件名搞混 T1?T2?傻乎乎弄不清。 ### 错误样例4:大小写搞混 ![](https://cdn.luogu.com.cn/upload/image_hosting/jfh631yu.png) 这种情况明显针对于像平时函数名带大小写,变量带大小写,~~以便码风美观~~的同学... ### 错误样例5:输出输入不匹配 ```cpp char -> "%c" int short -> "%d" long long -> "%lld" float -> "%f" double -> "%lf" ``` ![](https://cdn.luogu.com.cn/upload/image_hosting/dvka1823.png) 经典图片... ## 2.头文件问题 头文件建议使用**万能头**文件... **斜杠**方向要注意... ```cpp #include <bits\stdc++.h> // 错误:Windows 彳亍,Linux 不 彳亍 #include <bits/stdc++.h> // 正确 ``` ## 3.输入问题 若输入数据量庞大,建议使用快读,而快读的类型也需要注意,建议使用 $template$ 。 ## 4.输出问题 ### 错误样例1:"$Yes/No$" or "$YES/NO$" ### 错误样例2: 输出变量类型 ![](https://cdn.luogu.com.cn/upload/image_hosting/f5wcf2r3.png) ## 5.主函数没有 $return$ $0$ $;$ ![](https://cdn.luogu.com.cn/upload/image_hosting/88p0lfpn.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/bkrn4hvt.png) 话说现在没有 ```return 0;``` 也是可以的,但加上了又没有错... ## 6.赋值 "=" 与 判断 "==" 不分; ![](https://cdn.luogu.com.cn/upload/image_hosting/hlvz0xv4.png) ## 7.字符串和字符不分 ```cpp if (a[i] == 'A') { // 判断字符串中的某个字符是否与'A'相等 } if (strcmp(a, "A") == 0) { // 判断字符串是否与字符串”A”相等 } ``` ## 8.数据类型转换 $long$ $long$ $=$ $(long$ $long)$ $int$ $×$ $int$ (强制转换) ## 9.浮点运算精度丢失 考场建议使用精度高的 $double$ 进行运算... ## 10.注意某一句话是放在 $if$里面还是外面。 # 一般错误: ## 1.穷举法超时 穷举法最大的风险就是会出现运算**超时**,我们可以对输入的数据进行预判,以确定是否会超时。按考试评测机的配置,循环的次数的**最大值**可以大约在 $300000000$( $8$ 个 $0$ )。 (可能会更坑... 若实在找不到好的方法,可以用穷举法保证基本分... ## 2.数组定义过大 1.在主函数外的全局变量,数组最大可以约为: 400000000( 8 个 0 )。 ![](https://cdn.luogu.com.cn/upload/image_hosting/d57f74cz.png) 2.在主函数内的局部变量,数组最大可以约为:500000(5个0) ![](https://cdn.luogu.com.cn/upload/image_hosting/1f7qgmlv.png) **为减少比赛的失误,建议比赛时,若数组的长度超过$1000$。统一将其定义在主函数外面。** ## 3.初始化问题 重中之重... 多组数据初始化, 并查集初始化, 最短路初始化, $ST$表初始化, 线段树初始化, 树状数组初始化,~~(诶,这个好像不要~~ $LCA$初始化........... **初始化**一定要记住,尤其是子程序里面的初始化,如数组清空,重新赋值等等。 ## 4.不要滥用 $STL$ 如果不了解 $STL$ 的原理,各种数据结构的区别,使用 $STL$ 当然会吃亏。 别问我是怎么知道的... ## 5.不要滥用各种优化 同上,如 $register$ , $inline$ 等等,再没搞清楚基本原理和性质之前,建议不要使用。 ## 6.函数记得赋予类型 在 $Dev-C++ 5.11$ 中,下面这个代码可以编译成功: ```cpp #include <bits/stdc++.h> using namespace std; inline Init() { } int main() { Init(); return 0; } ``` emmm,有人考场检查的时候没检查出来,当场 $CE$ ,别问我是怎么知道的。 ## 7.删/增 注释 调试代码的时候一本会写注释,但... 有时候我们**忘删掉或注释掉自己的测试代码**,于是... 出现各种奇葩情况,如多空行,多输出,玄学答案... ## 8.避免使用指针 emmm,如果您不是 $C$ 语言高级编程员,建议不要使用指针,因为它是动态的。 有时候一些致命错误就隐藏在其中。 ~~如(没有释放指针,别问我是致命知道的~~ # 其他错误: 1. 倒序循环别忘了 $i--$ ...```for (int i = n; i >= 1; ++i)``` 2. 除法无法取模... 3. 读入字符串 $%s$ 不加 & ... 4. 复制代码别忘了修改不同的变量... 5. 声明变量最好别用**某些单词**,如time... 6. 分数和小数比较 $int$ 除以 $int$ 还是整数,所以**强制转化**成 $double$ ... 7. 注意**值域下标**和**数组下标**的区别... 8. 注意**有向图**和**无向图**建边... 9. 有的图是**不联通**的,此时 $BFS$ 和 $DFS$ 前面都要加一重循环... 10. 不要 **滥用** $memset$ 函数,它不是 $O(1)$ 的... 11. 注意**模数以及数据大小**... 12. 注意**读入优化的负数与初始化**... 13. 遇到**位运算**一定要用**括号**括起来,如:```dp[1 << 18 + 5]``` $MLE$ ```dp[(1 << 18) + 5]``` $AC$ 14. 0x3f 并不是**最大值**... 15. 注意变量重名,尤其是与全局变量... 16. 注意输出格式,是空格还是换行;多组数据之间是否要**额外换行**?(尤其是 $UVA$ ) 17. 请注意 $Windows$ 系统与 $Linux$ 系统下 $rand()$ 函数值域的显著差异。 18. 库函数自带的 $max$ , $min$ 要求两个参数变量类型相同。 19. 自己手打的 $max$ ,$min$ ,是否满足所有变量,如出现既要比较 $double$ 又要 $long$ $long$ 的情况。 20. ```for (int j = 1; j <= n; ++i)``` # 欢迎增添 特别鸣谢大佬们的离子: [Imakf](https://www.luogu.com.cn/blog/Imakf/oier-cuo-wu-ge-ji) [BrokenSea](https://www.luogu.com.cn/user/89551)