写给小白的OJ的一些知识

主要参考的是胡凡,曾磊主编的算法笔记,进行了整理摘要。

一、在线评测系统(Online Judge,OJ)

1.什么是OJ

一般来说可以看到题目的描述、输入格式、输出格式、样例的输入输出。然后我们根据题目给出的要求来写相应的代码,提交给OJ测评。OJ的后台会让程序测试多组数据,然后根据程序的运行结果来返回测评的结果。

2.系统如何测试

一般来说测试分为两种测试方式:
a. 单点测试:
这种方式就是代码只需要处理一组数据的输入即可,后台是利用多次运行代码来测试多组数据,然后对每组数据返回相应的结果。然后每次的测试数据通过会有一定的分值,最后代码的总分就是通过的测试数据的分值的总和。
b. 多点测试:
和单点测试对应的,这种测评方式主要就是代码要处理所有数据的输入,也就是说,后台运行代码只会运行一次,在一次运行中,代码要能够测试所有的数据输入,只有当所有数据测试都通过的时候这组代码才算通过,换句话说只要有一组数据不通过,最后的分数就是0分。现在大部分的OJ系统都是采用的这种方式,因为这种方式可以严格考验做题人的代码的严谨程度。

3.测试返回结果有哪些

(1)答案正确(Accepted,AC)
这种返回结果也就是说你的代码在OJ的测试中通过了所有的测试数据。单点测试的话就是通过一组数据就会返回一个AC,多组数据通过所有数据返回AC。

(2)编译错误(Compile Error,CE)
一般这种错误在本地编译器的时候就会发现,但也不排除在提交代码的时候选错了语言。

(3)答案错误(Wrong Answer,WA)
传说中的听取WA声一片,这种错误就说明代码的逻辑思路存在问题有bug,或者说算法的设计就是错误的,也不排除在写代码的时候输出了调试信息。一般来说还是代码阔的问题更多一些。

(4)运行超时(Time Limit Exceeded,TLE)
一般题目会要求代码的执行时间在多长时间之内,如果自身的代码超过设置的上限时间就会出现这个错误,也有可能因为逻辑的问题导致出现死循环超时。解决这种问题一般从时间复杂度和死循环入手。

(5)内存超限(Memory Limit Exceeded,MLE)
类似TLE错误,这种就是代码借助的辅助空间超过上限,比如说数组定义的长度过大。还有可能就是数组定义的位置也可能导致这个问题,定义在主函数内部和外部可用的空间其实也是不一样的。

(6)运行错误(Runtime Error,RE)
导致这种错误有很多原因,这编译是发现不了问题的,是由于在代码的执行过程中一引起的错误,比如说数组越界,指针乱指,这种就是非法访问内存导致的。再比如说除数为0,引起系统的中断。

(7)格式错误(Presentation Error,PE)
这个一般很好解决,注意一下输出的格式,比如说空格啊,换行等原因。

(8)输出超限(Output Limit Exceeded,OLE)
就是说程序输出了过量的内容,检查是否有调试信息的输出等等。

二、如何写“单点测试“和“多点测试”输入

1.单点测试代码写法

一般来说一次只要处理一组数据就不需要用到循环的方法,是一种“一次性”写法。

比如下面这个代码。

#include <stdio.h>
int main() {
   
    /*核心代码部分*/
    //举个例子,实现两个数相加
    int a,b;
    scanf("%d%d", &a , &b);
    printf("%d",a +b
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值