在线OJ注意事项

简介: 在线OJ注意事项

一、OJ概念

online judge,简称OJ,是一个在线的判题系统。

用户可以在线提交多种程序代码(比如:C、C++、Java、Python等),系统对源代码进行编译和执行,并通过预先设计的测试用例来检验程序源代码的正确性。现广泛应用于世界各地高校学生程序设计的训练、作业的自动提交判断,以及各种竞赛(比如ACM)等。

二、OJ原理

用户提交的程序在OJ系统下执行时将受到比较严格的限制,包括运行时间限制内存使用限制安全限制等。

  • 用户程序执行的结果将被OJ系统捕捉并保存,然后再转交给一个裁判程序。
  • 该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。
  • 最后系统返回给用户一个状态:通过、答案错误、超时、超过输出限制、超内存、运行时错误、格式错误、或是无法编译,并返回程序使用的内存、运行时间等信息。

三、白板编程

问题:本地IDEA测试都是通过,一放到🐂客网上就不行?

关键点:

  1. IDEA使用的类是否导入?

第一行 import java.util.*;

  1. 主类名称是否Main,你是否包含了main,核心的逻辑都在main中进行。

有的题不需要主函数,只需要写一个方法就不用(比如JZ offer)的题目。

  1. 你的程序中的输入输出是否按照题目要求。

要求空间复杂度为O(1),而新开数组 -> O(n)
要求时间复杂度不能超过O(nlogn),而双层遍历O(n^2)

  1. 边界条件判定,输出链表的倒数第K个结点

💪code : k默认合法,k不可能超过链表长度
🐂客:对k没这个保证,k有可能超过链表长度

四、关于提交不成功

  • 代码语法问题,导致编译不通过
    a.多去刷题,将常犯的错误积累下来
    b.避免使用一些奇怪的函数,或者与平台相关的函数
    c.最好不用vs写算法,vs默认是Windows下的方式,一般的OJ编译器可能无法识别
  • 代码编译成功,提交不成功

a.查看输出不成功的信息,输出格式不对还是无法通过某个测试用例
b.对于无法通过的测试用例,一般都会将无法通过的用例显示出来,然后提供一个本该输出与程序输出,通过输出结果以及测试用例,检查代码那块有误。
c.实在检查不出来,逐个测试用例处理

  • 自己编译器可以执行,但是OJ不可以通过

在自己的编译器上可以跑通代码,但是在OJ上面不可以提交原因是什么?这种问题有很多种,比如传入的参数没有进行合法检查,例如:指针没有判空等等。这种问题大多是这些边界的问题。

五、java的oj输入注意点(引用)

接下来引用一下🐂客网小小大佬的文章:

oj的java输入hasNext和hasNextLine区别

比如一道oj 题目的输入是这样的:

在这里插入图片描述
采用java语言的话,有的老铁这样处理输入输出:

Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
    int n = in.nextInt();
    //处理代码略
}

🐂客网的系统会提示错误,但是如果把hasNextLine改成hasNext或者hasNextInt的话,就会提示正确

while (in.hasNextInt()) {
    int n = in.nextInt();
    //处理代码略
}

这里要说明一下java中,hasNextLine和hasNext的区别。

先说结论:
==采用has xxxx的话,后面也要用next xxxx。比如前面用hasNextLine,那么后面要用 nextLine 来处理输入。==


说一下两个方法的区别:

  1. hasNext是检查是否有非空字符。
  2. hasNextLine是检查输入中是否还有linePattern。其中LinePattern其实是匹配一个正则表达式。
private static final String LINE_SEPARATOR_PATTERN =
                                           "\r\n|[\n\r\u2028\u2029\u0085]";
private static final String LINE_PATTERN = ".*("+LINE_SEPARATOR_PATTERN+")|.+$";

判题系统的所有测试用例都是存储在文件中,在上面的例子中,测试用例的文件为:

在这里插入图片描述
当处理完5后,没有非空字符了,hasNext返回了false,但是在linux系统中,5后面还有一个换行符\n,0X0A(有兴趣的老铁可以自己创建然后用二进制方式看一下文件)

所以 hasNextLine会返回true,但是其实后面并没有可以读的元素了,从而下面的in.nextInt会抛异常。

总结

🐂客网上的刷题体验和💪code相比差的很远

招聘中很多公司都用的前者这套系统进行笔试题

建议还是多刷OJ题~~~

相关文章
|
编解码 JavaScript 前端开发
曲鸟全栈UI自动化教学(一):基于页面元素定位自动化的不足和图像识别匹配自动化的优势分析
曲鸟全栈UI自动化教学(一):基于页面元素定位自动化的不足和图像识别匹配自动化的优势分析
653 0
曲鸟全栈UI自动化教学(一):基于页面元素定位自动化的不足和图像识别匹配自动化的优势分析
|
Rust 算法 Go
【密码学】一文读懂FNV Hash
FNV哈希全名为Fowler-Noll-Vo算法,是以三位发明人Glenn Fowler,Landon Curt Noll,Phong Vo的名字来命名的,最早在1991年提出。它可以快速hash大量的数据并保持较小的冲突概率,适合hash一些相近的字符串比如IP地址、URL、文件名等等。目前FNV算法有三个版本,分别是: FNV-0(已废弃)、FNV-1以及FNV-1a。这三个算法的结构非常相似,因此呢,在这里就一块说了。
4028 0
【密码学】一文读懂FNV Hash
语雀的markdown常用语法
语雀的markdown常用语法
8212 0
语雀的markdown常用语法
|
NoSQL Redis 数据库
阿里云Redis集群版简要介绍
产品简介 云数据库 Redis 提供集群版实例,轻松突破 Redis 自身单线程瓶颈,可极大满足对于 Redis 大容量或高性能的业务需求。 云数据库 Redis 集群版内置数据分片及读取算法,整体过程对用户透明,免去用户开发及运维 Redis 集群的烦恼。
14085 0
|
Web App开发 数据采集 Python
让ChromeDriver 125顺利运行:解决找不到chromedriver.exe的技巧
本文介绍了如何解决Selenium使用ChromeDriver时遇到的版本不匹配问题,以及如何设置环境变量。同时,文章提供了示例代码,展示如何在Python中配置Selenium使用代理IP、设定User-Agent和Cookie进行网页抓取,以提高爬虫的效率和成功率。确保ChromeDriver与Chrome浏览器版本一致,将`chromedriver.exe`添加到环境变量,然后使用`Options`和`Proxy`类配置代理和浏览器选项,最后通过`webdriver.Chrome()`启动浏览器并执行抓取任务。
1105 0
让ChromeDriver 125顺利运行:解决找不到chromedriver.exe的技巧
|
存储 弹性计算 数据库
阿里云优惠券领取入口、代金券查询和使用方法(建议收藏)
连夜整理阿里云优惠券领取入口,包括领券中心、学生无门槛300元代金券、域名优惠口令、代金券查询和使用方法,阿里云领券中心、云服务器代金券、优惠券、域名优惠口令、代金券查询和使用方法
2321 1
|
网络协议 Ubuntu Linux
会Linux系统上配IPv6地址的网工,那真是老6了!
会Linux系统上配IPv6地址的网工,那真是老6了!
358 0
|
机器学习/深度学习 传感器 编解码
【多传感器融合】BEVFusion: 激光雷达和摄像头融合框架 NeurIPS 2022
BEVFusion提出一个融合多摄像头和激光雷达数据的框架,可用于3D检测。在自动驾驶领域,通过独立处理并融合摄像头和激光雷达数据,可以显著提升3D对象检测的准确性和稳健性,尤其是在激光雷达可能出现故障的真实场景中。
3875 57
【多传感器融合】BEVFusion: 激光雷达和摄像头融合框架 NeurIPS 2022
|
SQL 安全 测试技术
扫描神器:AppScan 保姆级教程(附步骤)
扫描神器:AppScan 保姆级教程(附步骤)