考试检查事项
写在前面
写作缘由
还用说吗?显然是不想太快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的,要判断是否在一个集合再合并!
查出错了怎么办?
发现有错,要将相关的所有变量做更改。改完后建议全部重新读一遍代码,再看一次有无缺漏。
修改后不用的数组变量及调试用的变量要及时删去,可以省空间且看出是否有漏改的地方。
未完待续……