这里低级错误主要指与算法水平相关性不是特别大,或者能轻易发现的错误。诸如CE,静态内存超限,文件名打挂,样例不过。
1.开考前打开devCpp(我还是windows选手),打开工具栏,点开编译选项,加入如下编译选项,-Wall
可以防一些特低级错误,-Wl,--stack=*
可以在本地运行时防爆栈(然而并不能在实际评测时防爆栈)(*是您想要的栈空间大小)
2.把代码尽量放进函数,结构体,类,自己的命名空间中,同时对于只在局部使用的全局变量,不要开成全局,前面加上static
,既可以减少栈空间消耗,又能减少CE概率。
关于这个static
是什么,请自行百度,弄明白它的原理,谨慎使用(如果不理解其原理就去使用,会像int x;scanf("%d",x);
一样),这里只是提一下它的一个应用。
经实测
#include<cmath>
int y1;
int main(){
return 0;
}
这份代码会CE,而以下三份均不会
#include<cmath>
int main(){
static int y1;//这个static没什么用,只是降低栈空间消耗,减少进入函数后申请内存的时间
return 0;
}
#include<cmath>
class ZX_Bao_Ling{
int y1;
};
int main(){
return 0;
}
#include<bits/stdc++.h>
using namespace std;
namespace ZX_Bao_Ling{
int y1;
}
int main(){
return 0;
}
3.如果代码要进行卡常或者修改,先把代码备份,同时自己造一个强度较好的大样例,一遍修改后快速验证正确性。
4.交卷前十五分钟,切不可一直码代码码到死,一定要放下手头任务,进行一些必须的检查。
假设有一道题名称是A
首先,打开命令行,用g++ A.cpp -o A.exe -Wall
编译(本来这一步可以用dev-cpp,但后续还要用到命令行,而且命令行编译因为不能直接操作源代码,所以不会手抖导致在A.cpp中打进额外的字符,以前我校有人最后一遍编译时打进去了一个z,然后错失一等)
接着,建立一个A.in
的文件,将所有样例和生成过的所有数据放进去,和正确答案fc一遍
然后,在命令行里size A.exe
,然后会有如下显示
红色下划线就是程序所用静态内存,单位是字节,打开计算器除以1024除以1024,就转成了MB,经常使用这个,可以大大减少MLE概率。
最后,喝点水冷静一下,小心的看看文件名有无打错,调试输出有无删除,如果没有,那可以把手离开键盘,免得手抖出事。毕竟OI这种比赛,宁可最后五分钟无所事事,也不要在慌乱中CE,MLE。
可见noip交卷前15分钟,有四件事要干,一定要记住,四件事,一个都不要落下。
附:这是LCA大爷的考试经验总结