说明:本博客仅是针对鄙人自我理解的一种备忘。
OJ即Online Judge,中文“自动判题系统” 。目前仅知道牛客网OJ。
定义: 是一种线上对编写的程序运行结果的输出进行判断是否正确的系统。
使用运行流程原理: 顺利的话,完整流程共4步。 (1)编写好的程序放到OJ系统上提交———>(2)OJ系统对程序进行编译———*(编译通过)*——>(3)OJ系统将程序执行的(输出)结果存放到文件————>(4)OJ系统比较程序执行的(输出)结果文件和标准文件(标准答案)
注意: (1)严格的输入输出格式。键盘输入,屏幕输出。不用考虑读写文件。 (2)OJ系统判定程序结果,只是比较输出,不关注编程内容细节。所以输入的数据没必要非得存储在数组中,再对其使用。
如何正确处理适合OJ系统的输入输出格式:
输入格式常见3种情况及应对方法:
(1)不知道输入数据组数————一组一组读,读到文件结尾; (2)知道输入数据组数——先读数据组数,再使用循环; (3)只有一组数据输入——直接读数据。
输出格式常见4种要求 (1)不需要输出case数; (2)要输出case数; (3)每个case之后有空行——每个case后\n即可。 (4)两个case之间有空行——意思是最后一个case无空行,需要判断是否是最后一个case。
OJ输入输出细节和技巧
(1)输入。
①对输入数据是否使用变量存储起来,视情况而定,因为我们的目标只有一个,就是只需要输出OJ的标准答案。
②输入为字符串。 scanf(c语言)、cin(c++语言)、nextlnt(java语言),都是读到空白即停止读取。 读带空白的字符串用gets(c语言)、cin.getline(c++语言)、nextLine(java语言),再自己parse。
输入小技巧:为提高时间效率,c++用scanf、gets之类代替cin。java用BufferedInputStream代替其他输入函数。
(2)输出。
细心,一定要严格按照要求输出。如字母大小写,换行等。 一般输出每行末尾换行,但是输出每行后面一般没有空白。
输出小技巧:为了提高时间效率,c类语言输出一般用pintf代替cout。java输出尽量使用BufferedOutputStream。