CSP考试为什么会爆零
现在大部分选手应该已经开始着手备考CSP-J/S复赛,刷真题、刷模拟赛……
但在备赛时通常都在关注“知识点哪里有欠缺?”、“这道题怎么编码?”而忽略了日常训练与比赛实际情况的差异,最后可能因为文件命名等细节问题导致在比赛中爆零。
那么,通常是什么原因导致比赛爆零?选手又该如何避免爆零呢?
1.爆零原因 变量名冲突
用了 using namespace std;
之后容易产生的问题是,有些自己的变量名比如 time
、next
和std命名空间中的变量名冲突,而且在Windows下编译器不报错,但是在Linux下报错。
所以如果需要这几个单词,可以使用首字母大写Time
、Next
或者做一下变形,比如tim
、nxt
或者定义成局部变量。另外time
、next
等作为结构体的成员名是没问题的。
全局变量不要使用y0
、y1
、yn
、j0
、j1
、jn
。因为这些变量名称在C++11标准库里被定义了,不能再用作全局变量,否则编译会有警告或出错。但是这些变量可以用作局部变量。
2.爆零原因 变量初始化
变量的初始化常见有两种方式:输入和赋值。在使用变量之前记得要初始化。如果定义成全局变量,则系统会自动初始化。
3.爆零原因 输出格式
如果题目要求数据之间加空格,那就不能换行输出。
比如要求输出
1 2 3
如果选手输出
1
2
3
则不能得分。
大小写也要注意,需要仔细看清题目是要求全大写、全小写还是首字母大写。比如要求输出Yes
,则输出YES
、yes
、yES
等均不能得分。
4.爆零原因 拓展名错误
每个题目的输入输出文件的名字都是试卷上给出的固定名字,千万不要写错,注意大小写敏感。
有些Windows系统的电脑的扩展名是隐藏的,一定要让扩展名显示出来。否则轻则影响测试,重则爆零。
比如有些机器隐藏了扩展名,选手将程序命名为abc.cpp
,实际上是abc.cpp.cpp
,选手将输入文件命名为abc.in
,实际上是abc.in.txt
。
5.爆零原因 文件输入输出错误
在复赛考试中,需要使用freopen函数来进行输入输出重定向,而这个函数需要使用万能头文件#include <bits/stdc++.h>
。
文件输入输出有多种方式,最简单的是freopen。假如题目的标题是abc
,则只需要加入这两行:
freopen("abc.in","r",stdin);
freopen("abc.out","w",stdout);
注意,这里的函数名称和参数不能写错,任意一个地方出错都会导致程序爆零。
"r"
不能写成"read"
,也不能写成r
(这种情况编译器会报错)。注意一定是双引号的“”!
6.爆零原因 文件输入输出错误
两行freopen中的三个参数,是分别相反的,in文件对应着out文件,读取对应着写入,标准输入对应着标准输出
另外建议不要在程序的末尾写fclose函数。因为程序结束后,所占的内存就都释放了,fclose函数写不写是一样的。新手写的越多,意味着犯错的可能性越大。
考试的时候直接用以上程序框架就行,然后在freopen()
下面开始写程序。学生做题时为了方便测试,可以暂时先把两个freopen()
注释掉,但是最终提交的程序里面定要有freopen()
做文件输入输出重定向。
以上就是信奥赛第二轮考试为什么会爆零,希望大家不要爆零。