赛前准备

1、了解自己的备考状态,立足现实,确立自己的竞赛目标。

2、合理制定学习规划并执行,适当参加模拟赛,提前适应比赛状态。

3、规划出行路线,并提前一天看赛场。 开放机房后,找到自己的比赛位置,测试键盘和鼠标是否正常使用。 建议打开一个文件,测试是否能正常保存。

4、正式比赛时,开始后超过规定时间不得进入比赛现场,注意不要迟到。

5、准备好准考证、身份证、笔等参赛必备用品。 比赛现场禁止携带任何外接设备,可适量准备补充能量的食品,如巧克力等。

比赛时关键

一、文件操作(重点关注)

CSP-J/S复赛比赛和我们平时的考试是不一样的,必须要有文件输入输出,最终才会得到分数。

注意:一定要写文件操作!!!

打开网易新闻 查看精彩图片

二、注意“四名”

包括文件夹名、程序文件名、输入文件名和输出文件名。每道题这部分的英文名称都是一样的,注意区分大小写,一定要多检查几遍。

正确创建文件夹和文件存放示例:

打开网易新闻 查看精彩图片

第二轮比赛与我们平时在OJ上做题形式不同,需要我们将文件放入规定的目录,然后汇总提交,由系统统一评测后得到分数。那么应该在哪里写代码呢?

一般情况下,主办方会在计算机的E盘(或者D盘)根目录下建立以考生准考证编号命名的文件夹,考生应检查该文件夹名称是否正确(包括编号及大小写字母)。如有错误须立即上报监考人员,由监考人员进行更改。

确认无误后,考生须为每道试题再单独建立一个子文件夹,子文件夹名与对应的试题英文名相同(参见试题封面页)。考生提交的每道试题的源程序(.cpp文件)也必须按照对应的试题命名,分别存放在其子文件夹下。

如果子文件夹或者某一个文件缺失,都会导致爆零。

文件命名错误。在创建文件时一定注意文件名是否符合要求!文件名和cpp文件名与题目名相同,都必须使用英文小写,文件夹如果命名出错,那么评测软件无法找到相应的代码,结果自然是0分。

注意事项:

仔细检查选手的目录名和题目的目录名,并确定拼写正确。

源程序文件名(.cpp文件)必须使用英文小写,确定拼写正确。

比赛结束时只保留源程序文件(.cpp文件)即可,其它文件可以删除。

三、文件输入输出

除了答题方式不同,考试还要求每道题从指定的文件输入数据,并将结果保存到指定输出的文件中。以上要求可以通过重定向输入输出来完成,方法如下。

正确性是关键:文件输入输出必须100%正确,否则可能导致零分。

CSP-J/S认证要求:使用文件输入输出,具体操作如下:

输入文件:`freopen("xxxx.in", "r", stdin);

输出文件:`freopen("xxxx.out", "w", stdout);

注意:"xxxx"代表题目的英文名字。

注意事项:

输入输出的文件名必须使用英文小写,并与试题封面页要求的输入文件名和输出文件名相同,不能有多余的空格。

如果注释掉了文件重定向的代码,等程序测试无误后,一定要记得去掉注释。

四、头文件

头文件太多时,容易忘写using namespace std;

但是用了using namespace std;之后容易产生的问题是:自己的变量名和std命名空间的变量名冲突,而且在Windows下编译器不报错,在Linux下报错。所以自己的变量名不要使用hash、x0、x1、y0、y1,time、next、pipe等。可以将变量的首字母大写或者定义成局部变量。当然,time、next、pipe等作为结构体的成员名是没问题的。

五、变量初始化

变量在使用之前忘了初始化,里面的值是随机的,结果就会出问题,所以使用的时候不要忘记初始化,可以定义成全局变量,系统会自动初始化。

六、不能使用gets函数

由于gets函数会造成安全隐患,在C++中已经被弃用,所以注意不要使用gets函数。可以使用:fgets,getchar,scanf,cin.getline或其他读入方式。

七、数组

C++里数组有时候可能会出现莫名其妙的问题,所以一定要记得把数组开大点,并且赋初值。

最好是开成全局变量,因为在main函数里定义的是局部变量,给你的空间会比较小,二维数组很容易就爆了。

八、STL

STL主要是依靠各种容器和函数来实现各种功能,但是STL有些不是很常用,比如队列和栈,手写很方便,而且快一些,主要就用堆(priority_queue)、字符串(string)和动态数组(vector)。

九、时空复杂度

1000毫秒内较大循环次数不要超过10^8(10^8有点悬,10^7不超时)。空间限制在128MB时,数组元素类型为int时,元素个数较多别(约3*10^7)

十、数据范围

我们在为数组元素赋值为无穷大时,可以是1e9+1,或者0x3f3f3f3f=十进制1061109567,0x7f7f7f7f=十进制2139062143,int的范围是-2147483648~2147483647。所以程序中的无穷大可以定义为1e9+1或0x3f3f3f3f。

十一、其它注意事项

1、再次提醒,考试结束前请检查文件夹名,文件夹位置,文件名以及文件输入输出。

2、注意数据类型,需要时请使用long long或写高精度。(十年OI一场空,不开long long见祖宗)

3、注意数组大小,数组太大将无法运行导致0分。一个int为4字节,long long、double为8字节,数组大小要在 3 × 1 0 6 3\times10^6 3×106以内。也不要数组太小,小心RE。

4、不要忘记变量初始化,全局变量会自动初始化。

5、注意下标不要越界,比如背包j-w[i]时需要确实其大于等于0。

6、若使用直接输出进行调试,比赛结束前一定要再检查一遍输出的中间结果内容是否被删除,包括多余的换行。

7、涉及到有无解,可以直接输出无解骗分。

8、检查是否直接除以0。

9、scanf读取变量不要忘记加地址符。

10、不建议使用快读,关闭输入输出同步流即可。

11、编译记得开-std=c++14

12、输出格式不要出错,忘记输出换行或输出多个空格,如输出一行一定要输出换行。

13、不确定要写暴力。有想法且时间足够须对拍后作为自己的最终代码。

14、优先队列为priority_queue(默认大顶堆),哈希表unordered_map,不要拼错。

15、double的比较需要使用fabs,不能直接==。

例如:

打开网易新闻 查看精彩图片

16、等监考老师收完代码再离场。

#泉州信息学竞赛