数据种类 | 意义 | 程序中正确的处理方式 | 公测是否可能出现 | 互测是否允许提交 |
---|---|---|---|---|
正确数据 | 一切格式正确,且满足数据基本限制的数据。 | 对于输入数据正确识别并给出正确的计算结果。 | 是 | 是 |
错误数据 | 存在格式错误,程序需特殊处理,但满足数据基本限值的数据。 | 对于输入数据正确识别并按照格式错误的方式进行处理并输出对应的结果。例如输出WRONG ANSWER! |
是 | 是 |
非法数据 | 不满足数据基本限制的数据。 | 程序不需要考虑这样的情况。 | 否 | 否 |
一些概念的定义:
- 数据格式 指在指导书等文档内定义的关于输入数据标准格式的定义。
- 数据基本限值 指在指导书等文档内定义的关于数据数据的最基本限制。主要目的为
- 给程序编写者一个关于极限数据规模及特征的上限,便于确定整体设计目标。
- 给程序测试者一个测试数据的最基本限制
,杜绝无底线的暴力测试等情况。 - 一般情况下,数据基本限值会在互测相关的部分提到。
一般情况下,除非特殊说明,否则空白字符在作业中均包含且仅包含<space>
和\t
。
请在处理空白字符相关的问题时,进行充分的考虑。
在一般的操作系统中,换行符一般是如下的格式:
- Windows
\r\n
- Unix
\n
- MacOS
\r
其中\r
指的是ASCII为10的字符,\n
指的是ASCII为13的字符。
在实际的Java程序编写处理中,我们一般不需要特别考虑这个问题,直接使用自带的scanner即可。
例如,对标准输入流的读操作:
import java.util.Scanner;
public abstract class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line1 = scanner.nextLine();
String line2 = scanner.nextLine();
System.out.println(String.format("This is first line : \"%s\".", line1));
System.out.println(String.format("This is second line : \"%s\".", line2));
scanner.close();
}
}
line1
和line2
右侧不会包含换行符(但会包含空白字符,请注意),一般情况下按照上述情况处理即可。
不过,对于一些比较想不开的,或者想要尝试自己造类似“读入优化”一类东西的大佬同学,建议如下:
- 请充分考虑三种换行符的兼容,不保证测试数据为其中的某一种,也不保证同一测试数据内只包含一种。
- 实际上,在Java中造C++式的IO优化,大概率只会让程序性能更低下,且可维护性更差。具体的,如果感兴趣的话,可以去实践,并研究一下Java和C++的差异。
就程序的入口点(如果不知道入口点是什么的话请百度)方面,我们系统的操作方式如下:
- 对于提交上来的程序,对整个程序代码进行扫描,找出所有的入口点
- 如果未发现入口点,则直接判定为无法运行(但是可以通过编译)
- 如果出现了一个或者多个入口点,则在入口点里面选一个进行接下来的程序运行。但是,不保证一定会使用某一个入口点。
- 入口点的大致寻找方式定义为从所有的.java文件中寻找顶层类(即非内部类),并在顶层类中寻找public static void main(String[])方法。
故综上,建议同学们保证在程序内有且仅有一个入口点,以免造成不必要的麻烦。
由于评测机运行环境只提供utf8运行模式,所以我们的程序编码格式统一为utf8格式。
基于上述原因,一切由于编码格式问题导致的程序编译、运行、测试异常,助教团和课程组均不对此类后果负责。
我们采用通行的抄袭检测工具对每次作业的代码进行全覆盖扫描,注意我们采用的工具是在语法树基础上进行比对。一旦相似度高于我们关注的阈值,我们会人工对检测结果进行审核,如果基本确认是抄袭,课程组老师会找相关同学了解情况。一旦确认情况无误,我们会按照如下规则进行处理:
- 抄袭者,不论其动机和过程,直接取消作业成绩,保留进入补给站机会,但需要按照补给站的具体规则来操作;
- 被抄袭者,如果出现怂恿抄袭的情况,将按照抄袭者的处罚规定进行处理;
- 被抄袭者,如果提供其代码给抄袭者,虽然无怂恿情况发生,但客观上助长了抄袭,将取消其当次作业的成绩,按照一次无效作业处理;
- 被抄袭者如果未向抄袭者提供和展示其代码,而是讨论和介绍其设计思路,免受处罚。
- 所有的处理仅仅是为了维护一门课的正常教学秩序,不涉及任何道德评价
注:我们的抄袭检测不只是针对你们本届同学的代码,还包括上一届同学的代码,请一定慎重“借鉴”别人的代码
我们会使用一些自动化检测方法对所有提交的代码进行检查,对于检查出可疑现象的代码,我们会统一进行人工复核,人工复核之后仍然判断为非法代码的将取消本次作业成绩。 非法代码包括以下情况:
- 在公测和bug修复阶段使用”打表“方式通过测试点或完成修复的
- 对于官方下发的输入和输出接口进行任何修改的代码