目录
长期以来,信来一份爆零诊断指南奥模拟赛大多为IOI/ACM赛制,和正式比赛有很大差异,无法真实模拟正式赛的各种机制(如文件夹建立规则、无反馈机制等)。
根据前两场OI-Contest的比赛情况,较大比例的同学是不熟悉信奥赛制的比赛规则的,其中每场都有多于1/3的选手爆零。
其原因不仅仅是代码不会写、题不会做,更主要的是不了解比赛规范,或是由于不熟悉OI赛制的无反馈机制而导致的失分。
数据统计
第一场OI-Contest爆零人数达34%
第二场OI-Contest爆零人数达36%
结合之前两场的选手代码,以及赛后直播爆零选手连麦诊断,我们总结了以下几个方面的爆零原因。
快来看看你有没有中招吧!
爆0原因:
原因一:文件夹建立不符合规范
CCF对于正确的文件夹规范是这样描述的:
绿色框代表选手需要建立的文件夹结构
最外层是考号,考号下有以题目英文名命名的文件夹,每个文件夹下又有对应的同名cpp文件
而大部分在比赛中爆零选手是这样建的文件夹:
还有这样的:
甚至还有这样的:
文件夹如果建错了,评测软件无法找到相应的代码,当然就会导致0分了!
原因二:没有加文件读写或读写错误
平时选手们在线OJ上做题时,大部分题目都是不需要文件读写的,就像这样:
样是读取来自标准输入输出流stdin/stdout的数据,不符合OI赛制的要求,是错误的写法
在正式比赛(CSP-J/S以及NOI系列活动中),必须要进行文件读写,即在main函数开始前加上文件读写函数,改变数据流:
文件读写示例
上图展示了对于clock这道题而言应该如何调用文件读写函数,具体的文件读写代码需要结合题目文件名来确定,切记不能死记硬背上面的代码!
还有一些同学,因为在测试时为了方便,从样例文件读入,把代码写成了题目名+序号的格式:
sequence1.in是错误的写法
通常下发样例文件是会在题目后标注这是哪题的第几个样例,因此选手如果忘记在提交前删除序号,也会导致文件读写失败!
原因三:文件夹命名不符合要求
前两场OI-Contest采用了上海地区的文件夹命名规范,即文件名应命名为“考号+姓名小写全拼”
注意:各省对于文件夹命名的规范、要求可能不同!!!
考前请查阅本省通知!
然而,尽管明确了上述规定,仍然有多位同学命名错误:
橙色表示命名不规范
在正式比赛中,未按照规定格式命名的,将会被作为0分处理!
原因四:头文
头文件引用缺失,将会导致编译错误,代码无法运行,从而导致0分。
但是,有些错误会因系统、IDE、编译器不同而被悄悄地修复,没有报错。
经过排查,其原因是引用万能头文件错误,写成了这样:
#include<bits/stdC++.h>
请你用3秒找出上述写法的错误所在——
(o゜▽゜)o☆[BINGO!]
是因为这里的stdC++中的C大写了!!!!!
但是这是可以在DevC++里编译通过😱!!!而实际是会编译失败的!
正确的写法应该是小写c:
#include<bits/stdc++.h>
还有一些同学不使用万能头文件,而是自己添加头文件,也是有漏掉的头文件的风险!
最诡异的是,在非标准环境下运行,有时并不会产生编译错误的提示!
规避方法:
1. 正确使用万能头文件
2. 在标准环境NOI Linux 2.0下书写代码
3. 使用Windows系统的同学,要了解尽可能多的Windows和Linux的区别,从而避免编译错误发生
原因五:注释
大部分选手在本地调试时,往往会把文件读写函数先注释掉,先在终端进行输入输出,就像这样:
但是,最后提交时,忘记把注释撤销了,文件读写失效,因而导致0分
或是在调试代码时,输出中间变量的语句未注释,也会导致因输出多余的信息而导致答案错误:
原因六:考号写错
考生如果不小心把考号写错,提交时找不到其代码,会被视为缺考,导致零分!
原因七:空间限制
数组开大
有些选手对内存空间不敏感,往往会因为担心数组越界而把数组开大。
而题目是有空间限制的,往往标注在题面pdf的第一页,而这又是最容易被选手忽视的一页!!!
表格标注了每题的内存限制
数组开小
一般是不细心导致的。
比如,题中提示n<=1000000,实际代码中数组只开了100000:
int a[100000];
规避方法:
写代码前,计算好数组空间是否满足空间大小限制
手动造大样例测试
使用常量定义数组大小,并使用科学计数法避免不细心导致的少一个0的问题
const int N = 1e5+10;
int a[N];
原因八:认证环境与评测环境不同
部分省份提供“Windows+NOI Linux 2.0”两种系统环境作为可选的认证环境。
而最后进行代码评测是在NOI Linux 2.0上进行的。
选择在Windows上写代码的同学,如果对两种系统的区别不熟悉,就会导致爆零。
对于两种区别,各省通知也对此作了详细说明,并且不受理因环境问题提出的任何申诉:
陕西省CSP-J/S 2021第二轮认证安排的通知
上述提到的问题是在线模拟赛无法及时检测和规避的。
想要知道真正的NOI赛制及其规范,一定要参加全真模拟赛!
OI-Contest是NOI赛制的全真模拟赛,提供全真的认证环境,模拟真实的比赛流程,让选手在赛前就能了解、体验真实比赛规范!(不是做广告!!!!!!!!!!)
并且可以有效检测是否存在爆零的情况!
参考:信息学算法编程