考试检查事项

写在前面

推荐结合阅读这个这个

写作缘由

还用说吗?显然是不想太快AFO啦!

主要坑点

数组大小

  • 数组需要定义大小,且至少多开1,否则就要写const使其静态。这一点在DFS类的题目中特别注意!

  • 不能太大,否则TLE/MLE,都不是什么好结果。

  • 也不能太小,不然RE/WA,也不是什么好结果。

  • 在建双向边、存线段树、高精度乘法等题目中特别要小心!

数组越界

  • 处理到0或者1时一定要特判,不要偷懒!

数据类型

  • 十年OI一场空,不开long long见祖宗。

  • 有些时候还卡long long,注意是否高精/__int128。

  • 开了long long,要检查数组是否爆空间。

  • double在数据过大时,精度很差,注意是否要优化。

  • long double:数据在1e9以上要用,输出时printf(“%.2Lf”)

文件操作

  • 不多说,删注释并检查打对freopen没有。

输入输出

  • 对于整数,最好都用快读快写,至少用scanf/printf。

  • 对于字符,用getchar()或者scanf。

  • 对于字符串,用cin/cout。

  • 对于换行,建议用putchar(‘\n’),最后一个用endl

取模

  • 每一步运算都要取模!

  • 快读时也要取模!

  • 做减法时加上模数。

  • 在确保正确的基础上,因为取模很慢,所以尽量手写取模或少取模(确保long long存的下的前提)。

运算顺序

  • 矩阵乘法不具有交换律!

  • 减法不具有交换律!

位运算

  • 位运算的优先级难以预料,一定要加括号,特别是!、==、&&、||这些特别容易错!

多种算法的选择

  • 最小生成树,要根据图的特点选择。

  • 最短路,用dij似乎更靠谱。

  • 不带修的RMQ,别再写线段树了,写ST表吧,你的ST表水平已经不像原来那样糟糕了!

二分边界

  • 二分上界要尽可能开大,但是不要太接近 int 或 long long 的边界!

出过人命的坑

循坏次数

  • 如果答案要更新到n,要检查n是否得到了更新(如NOIP2021T1);同理要检查0是否会出问题。

并查集

  • 对于需要更新size的,要判断是否在一个集合再合并!

查出错了怎么办?

  • 发现有错,要将相关的所有变量做更改。改完后建议全部重新读一遍代码,再看一次有无缺漏。

  • 修改后不用的数组变量及调试用的变量要及时删去,可以省空间且看出是否有漏改的地方。

未完待续……