【内部资料】请牢记!CSP-JS第二轮及NOIP避坑指南
每年的信息学比赛,都有很多选手因为各种原因遗憾爆零,这里总结了16条注意事项,比赛之前一定要重视起来。
[初学者应特别注意的事项]
01 文件输入输出这部分是参赛选手们出错最多的地方!!!不是百分百正确就会爆零!!!和平时练习不一样。CSP-J/S第二轮和NOIP,要求用文件输入输出,再具体点,就是一定要记住两句话:
freopen(“xxxx.in”,“r”,stdin); freopen(“xxxx.out”,“w”,stdout);
注:xxxx是每道题的英文名字。
02 注意“文件名”注意输入文件名、输出文件名、代码文件的命名。每道题这部分的英文名称都是一样的,都是小写,一定要多检查几遍!有的孩子对计算机操作不熟,比如由于机器隐藏了扩展名,会把代码文件命名成XX.cpp.cpp,也一定要避免。
03 输出格式和大小写问题注意题目要求,比如:每个输出结果在同一行,还是在不同行;输出yes no right impossible等英文提示时,是否要求首字母大写,大小写在Linux下面是不一样的。
04 注意存盘,不要关机为了防止突发事件,至少20分钟存盘一次 。千万不要关机,否则程序会丢失。
05头文件最常用头文件,一般写代码时先都把这几个写上去: <iostream> <cstdio> <cmath> <cstring> <cstdlib>
较常用头文件: <algorithm> <vector> <queue> <string>
头文件太多时,容易忘写using namespace std;但是用了using namespace std;之后容易产生的问题是:自己的变量名和std命名空间的变量名冲突,而且在Windows下编译器不报错,在Linux下报错。所以自己的变量名不要使用time、next、pipe等。如果需要这几个单词,可以用Time、Next等第一个字母大写或者加上一些字母,如mytime、mynext等,或者定义成局部变量。当然,time、next、pipe等作为结构体的成员名是没问题的。
06变量初始化变量在使用之前忘了初始化,里面的值是随机的,结果就会出问题,所以使用的时候不要忘记初始化,可以定义成全局变量,系统会自动初始化。
07 数据类型注意数据类型,输入输出的时候占位符和数据类型要一致,不一致在有时候可能结果也没有错误,但是评测的时候可能就有问题,比如long long的数据类型不能用“%d”,而应该用“%lld”。
08不要使用gets函数由于gets函数会造成安全隐患,在C++中已经被弃用,很多孩子不知道,导致程序是0分,所以注意不要使用gets函数。可以使用:fgets\getchar\scanf\std::cin或其他读入方式。
09数组C++里数组有时候可能会出现莫名其妙的问题,所以一定要记得把数组开大点,并且赋初值。最好是开成全局变量,因为在main函数里定义的是局部变量,给你的空间会比较小,二维数组很容易就爆了。
10全局变量不要用y1y1在C++11标准库里被定义了,不能用作全局变量,否则Linux下编译出错。可以用作局部变量。类似的还有y0、yn、j0、j1、jn等。
11 在Linux下编译通过很多省份提供NOI Linux2.0虚拟机,Windows系统和Dev-C++孩子们用的熟悉,但是因为评测是用Linux系统的编译器,会有些许不同,孩子们可以在Windows下用Dev-C++写代码调试,但是最后一定要确保在Linux的环境下编译通过。
[对水平较高选手们的建议]
12 STL
STL主要是依靠各种容器和函数来实现各种功能,但是STL有些不是很常用,比如队列和栈,手写很方便,而且快一些,主要就用堆(priority_queue)、字符串(string)和动态数组(vector)。
13 指针指针一般竞赛选手用得比较少,因为太容易出错了,一般选手会开个数组用下标i做指针,比较方便。
14 时间和空间限制1000毫秒内最大循环次数不要超过10^8(10^8有点悬,10^7绝对不超时)。空间限制在128MB时,数组元素类型为int时,元素个数最多千万级别(约3*10^7),要定义在到main函数外面的全局变量区(二维数组的两个维度大小要相乘)。
15数据范围有的题目,多个数相加,每个数的最大值就到了1e9,那么存放和的变量就必须是long long 。有的题目,边权的最大值都到了1e9,并且更新最短路径时两个边权相加,结果就是2e9,那么我们在为数组元素赋值为无穷大时,应该设多少呢?我们的无穷大可以是1e9+1,或者0x3f3f3f3f=十进制1061109567, 0x7f7f7f7f=十进制2139062143,int 的范围是-2147483648 ~ 2147483647。所以程序中的无穷大可以定义为1e9+1或0x3f3f3f3f 。
16图的问题建立图的邻接矩阵和邻接表时,注意单向边和双向边,重边,自环等情况。以上,就是考试时需要注意的”坑“。每一个坑里,都写满了血泪史,考生们一定要尽力避开,不要犯低级错误。
