赛前准备
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、等监考老师收完代码再离场。
#泉州信息学竞赛
热门跟贴