CSP-J/S复赛如何避免“爆零”、调试技巧

在CSP-J/S复赛中,出现成绩为零的情况可能是由多种原因导致的。以下是一些常见的原因:

以2023年CSP-J为例子,先看看第一页题目:

1.文件名(程序名和输入输出文件名)必须使用英文小写,每一题对应的程序名、输入输出文件名都会显示在该表格内,请严格按表格内的名字起名,特别注意程序名后缀是。cpp,不要画蛇添足地在前面多加一个cpp   

    

2.文件夹错误

注意事项提交程序代码文件的放置位置一定要参考各省的具体要求,另外还要看每道题都有自己对应的文件夹。

3.文件读写问题

在OI赛制下,需要通过文件读写来完成输入输出。使用freopen()时必须注意格式中对应输入输出文件名,每题的输入输出文件名严格按照表格上的命名。

有些选手在xxx.in和xxx.out的前面都加上了。\\,unix环境下评测编译错误,正确写法(以小苹果一题为例子),写在main()函数里的头两句

freopen("apple.in","r",stdin);

freopen("apple.out","w",stdout);

另外如果为了方便调试可能会注释掉freopen()函数,但最后一定要记得去掉注释符号,否则也会导致成绩为零。

4.调试代码未注释或删除

有些同学为了调试代码,在程序中间写了一些用于辅助调试的输出语句,调试完成后一定要将这些语句删除或者注释掉,否则会导致“爆零”。

5.数组开得太大

如果数组开得太大,可能会导致内存超限错误或者运行错误。首先,根据题面数据要求,在全局建立合理的数组,并注意不要超过内存限制,如果有些题目本身建议的数据量使用数组会内存超限制的话,说明你就要重新思考自己的算法,而不要强硬去开引起超限的数组。

6.变量初始化问题

在函数内使用变量之前(例如用于计数的变量)记得要初始化,否则系统会在第一次使用该变量时(非赋值的情况下)随机给数值。如果定义成全局变量,则系统会自动初始化0。

7.输出格式问题

如果题目要求数据之间加空格,那就不能换行输出。大小写也要注意,需要仔细看清题目要求。

8.时间、空间超限

每道题都会有相对应的时间空格限制标注在列表中(下表),要注意代码的执行时间不要超过题目的限制,同时注意内存使用不要超过限制。

9.编译环境问题

NOI Linux的环境相对比较严格,代码在Windows环境或者线上提交可能没问题,但在NOI Linux评测后可能编译错误。最典型的是:使用了printf和scanf但只引入了iostream的头文件,却没有引入cstdio头文件。

10.头文件问题

头文件引用缺失,将会导致编译错误,代码无法运行,从而导致0分。

11.变量名冲突

使用using namespace std;之后,全局定义变量名时,容易发生冲突,例如不要使用max, min, hash、x0、x1、y0、y1,time、next、pipe等,会发生编译错误(图一),如果不使用using namespace std;错误就没有了(图二)。建议同学们起名的时候要多注意这些细节。      

12.测试环境不同

在不同的测试环境下运行代码可能会有不同的结果,需要确保代码在比赛的评测系统中也能正常运行。

13.不要使用gets函数

gets函数会造成安全隐患,在C++中已经被弃用,所以注意不要使用gets函数。可以使用fgets或getline 代替,注意提前练习并记住写法。

14.注意存盘,不要关机

为了防止突发事件,至少20分钟存盘一次。千万不要关机,否则程序会丢失。如果比赛中途出现电脑问题,例如没有原因的死锁或死机,一定要举手找监考老师来处理。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容