来一份爆零诊断指南C++

2022-08-03 08:37:34

目录

来一份爆零诊断指南

数据统计

爆0原因:

原因一:文件夹建立不符合规范

原因二:没有加文件读写或读写错误

原因三:文件夹命名不符合要求

原因四:头文

原因五:注释

原因六:考号写错

原因七:空间限制

原因八:认证环境与评测环境不同


长期以来,信来一份爆零诊断指南奥模拟赛大多为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分

或是在调试代码时,输出中间变量的语句未注释,也会导致因输出多余的信息而导致答案错误:

原因六:考号写错

考生如果不小心把考号写错,提交时找不到其代码,会被视为缺考,导致零分!

原因七:空间限制

  1. 数组开大

    有些选手对内存空间不敏感,往往会因为担心数组越界而把数组开大。

    而题目是有空间限制的,往往标注在题面pdf的第一页,而这又是最容易被选手忽视的一页!!!

    表格标注了每题的内存限制

  2. 数组开小

    一般是不细心导致的。

    比如,题中提示n<=1000000,实际代码中数组只开了100000:

int a[100000];

规避方法:

  1. 写代码前,计算好数组空间是否满足空间大小限制

  2. 手动造大样例测试

  3. 使用常量定义数组大小,并使用科学计数法避免不细心导致的少一个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赛制的全真模拟赛,提供全真的认证环境,模拟真实的比赛流程,让选手在赛前就能了解、体验真实比赛规范!(不是做广告!!!!!!!!!!)

并且可以有效检测是否存在爆零的情况!

参考:信息学算法编程

  • 作者:一起摸摸鱼
  • 原文链接:https://blog.csdn.net/zhengheda/article/details/125809449
    更新时间:2022-08-03 08:37:34