• Online Judge系统     

Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交给定问题的多种程序(如C、C++、Pascal、Java)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。

一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制、内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态:通过(Accepted)、答案错误(Wrong Answer)、超时(Time Limit Exceed)、超过输出限制(Output Limit Exceed)、超内存(Memory Limit Exceed)、运行时错误(Runtime Error)、格式错误(Presentation Error)、无法编译(Compile Error),并返回程序使用的内存、运行时间等信息。在线测评系统的评判情况如表1所示。

表1  测评系统的评判结果

评判

缩写

说明

Accepted

AC

程序通过了所有的测试点,被判为正确

Presentation Error

PE

程序的输出结果是正确的,但是格式不符

Time Limit Exceeded

TLE

程序运行超过了限定的时间,可能是超过总时间限定,也可能是超过单个测试点时间限制

Memory Limit Exceeded

MLE

程序运行超过了所需的内存限制

Wrong Answer

WA

程序的输出结果不对

Runtime Error

RE

程序在运行时产生了无法处理的异常

Output Limit Exceeded

OLE

程序产生了多余的输出

Compile Error

CE

程序无法通过编译

System Error

在线测评平台无法运行该程序

Validator Error

检验程序在校验输出结果时出现异常

Online Judge系统最初使用于ACM-ICPC国际大学生程序设计竞赛和OI信息学奥林匹克竞赛中的自动判题和排名。现广泛应用于世界各地高校学生程序设计的训练、参赛队员的训练和选拔、各种程序设计竞赛以及数据结构和算法的学习和作业的自动提交判断中。

国内较好的在线测评系统有:

北京大学的PKU JudgeOnline(http://poj.org/ )

浙江大学ACM在线测试(http://acm.zju.edu.cn/onlinejudge/ )

杭州电子科技大学的HDU Online Judge System (http://acm.hdu.edu.cn/)

  • PKU JudgeOnline在线测评系统

在亚洲,北京大学的PKU JudgeOnline在线测评系统是规模最大、品质最高的在线测评系统。在IE浏览器的地址栏输入http://poj.org/,打开PKU JudgeOnline网站,出现如图1所示的主页。

图2-1  PKU JudgeOnline主页

在PKU JudgeOnline网站中,提供了4千多道题目。用户可以在该网站中注册一个用户ID,然后选择某个问题进行求解。用户可以将编写的程序通过网页提交给在线测评系统,每一次提交后,测评系统都会将评判结果显示在网页上。

用户可以根据测评系统反馈回来的评判结果修改程序,直到最终收获Accepted。这个过程不仅能培养用户独立分析问题、解决问题的能力,而且每成功解决一个问题都能给用户带来极大的成就感。

在PKU JudgeOnline主页单击超链接“Problems”,可打开如图2所示的页面。在页面中用列表的形式显示了系统中提供的各个问题,例如,页面中显示的“1000、A+B Problem、 56%(271151/480509)、2019-6-10,表示ID号为“1000”的题目“A+B Problem”截止到2019年6月10日,有480509人次提交了程序,其中有271151次通过。

图2  Problems 列表

在列表中可以选定某个问题,单击Title下的超链接,可以打开对应问题的页面。例如,单击ID号为2590的问题“Steps”超链接,或者在“Prob ID:”文本框中输入“2590”,单击“Go”按钮,可以打开如图3所示的页面。

图3  题目“Steps”的描述信息

这道题目的意思是:给出在数轴上的两个整点x、y(0<=x、y<2^31),问从x移动到y至少需要几步?移动时要求:(1)每一步可以比上一步长1、短1或相等;(2)第一步和最后一步必须是1。

  • 编程思路

输入数轴上的两个点from和to后,需要移动的距离就确定了distance=to-from。由于移动时,第一步和最后一步必须是1,且每一步与上一步相差不超过1。因此最快的移动方式应该为从1开始递增(每次加1)移动到中点附近,然后递减(每次减1)移动到终点。由于递增和递减的两个过程可以基本看成是对称的,因此设置一个变量cnt来记录每次移动的步数,初始值为0。移动时,从总距离distance上减去递增过程中的cnt和递减过程中的cnt,直到distance不再大于0。

例如,从10移动到19,需要移动的情况为:distance=19-10=9。

9-1(第1步)=8-1(最后1步)=7>0

7-2(第2步)=5-2(倒数第2步)=3>0

3-3(第3步)=0  结束。

  • 源程序

#include <iostream>

using namespace std;

int main()

{

int n,from,to,distance,cnt,ans;

cin>>n;

while(n--)

{

cin>>from>>to;

distance = to - from;

cnt = ans = 0;;

while(distance > 0)

{

distance -= ++cnt;

++ans;

if(distance > 0)

{

distance -= cnt;

++ans;

}

}

cout<<ans<<endl;

}

return 0;

}

在写出了该问题的程序后,可以将其提交给测评系统评判。单击主页中的“Submit Problem”超链接,打开如图4所示的提交页面。在“Problem ID”后的文本框中输入“2590”,在“Language”下拉列表框中选择语言为“C++”,在“Source”多行文本框中输入所编写的程序,单击“Submit”按钮,即可将程序提交给测评系统。之后,测评系统会打开一个页面显示评判后的结果。

图4  程序提交页面

PKU JudgeOnline作为一个优秀的开放式程序在线评测平台,值得程序设计爱好者好好利用。特别是计算机类专业的学生,可以充分利用自己的课余时间和上机实验课时间,随时上网做题,一旦提交答案,马上可以知道对错,从而极大地调动学习的积极性和主动性,大大提高实际的编程能力。

上POJ刷题的更多相关文章

  1. POJ刷题记录 (。・`ω´・)(Progress:6/50)

    1743:前后作差可以转化成不可重叠最长公共字串问题,运用后缀数组解决(参考罗穗骞神犇的论文) #include <cstdio> #include <cstring> #in ...

  2. C#LeetCode刷题,走进Google,走近人生

    概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/1015 访问. 本系列博文将会向大家展示我在LeetCode上的刷 ...

  3. POJ 水题(刷题)进阶

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...

  4. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  5. LeetCode刷题总结-树篇(上)

          引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...

  6. LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式

    作者:HelloGitHub-小鱼干 在众多的诸如阿里.腾讯等大厂之中,最看中面试者刷题技能的大概要数有"链表厂"之称的字节跳动了.作为一个新晋大厂,字节跳动以高薪.技术大佬云集吸 ...

  7. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

  8. poj-2777线段树刷题

    title: poj-2777线段树刷题 date: 2018-10-16 20:01:07 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道线段树的染色问题,,, ...

  9. $2019$ 暑期刷题记录1:(算法竞赛DP练习)

    $ 2019 $ 暑期刷题记录: $ POJ~1952~~BUY~LOW, BUY~LOWER: $ (复杂度优化) 题目大意:统计可重序列中最长上升子序列的方案数. 题目很直接的说明了所求为 $ L ...

随机推荐

  1. 《Visual C++ 2010入门教程》系列二:安装、配置和首次使用VS2010

    作者:董波 日期:2010.6.15 写在前面 在我还在上学的时候,我选择了C++,最初我用VC6作为我的IDE,我看过很多本C++的教材,有的适合我,有的不适合我,其中有一本叫<Visual ...

  2. ThreadLocal工具类的使用(隔离思想)

    ThreadLocal不是用来解决共享对象的多线程访问问题的, 通过ThreadLocal的set()方法设置到线程的ThreadLocal.ThreadLocalMap里的是是线程自己要存储的对象, ...

  3. AutoIT: 返回文件目录下所有的文件名,包括子文件

    _filelist("D:\Snagit 10") Func _filelist($searchdir) ;;;函数名(形参) $search = FileFindFirstFil ...

  4. snnu(1110) 传输网络 (并查集+路径压缩+离线操作 || 线段树)

    1110: 传输网络 Time Limit: 3 Sec  Memory Limit: 512 MBSubmit: 43  Solved: 18[Submit][Status][Web Board] ...

  5. hibernate映射文件set key one-to-many

    转自:https://www.linuxidc.com/Linux/2013-11/92228.htm 1 hibernate映射文件set key one-to-many的配置. POJOs如下: ...

  6. bzoj 2809: [Apio2012]dispatching【dfs序+主席树】

    可并堆就可以,但是想复健一下主席树. 考虑枚举管理者,然后选忍者的时候在子树中贪心的从小到大选.做成dfs序就是选区间内和小于等于k的最多点.可以用主席树,查询的时候在主席树上二分即可 这里注意,为了 ...

  7. bzoj 3028: 食物【生成函数】

    承德汉堡:\( 1+x^2+x^4+...=\frac{1}{1-x^2} \) 可乐:\(1+x \) 鸡腿:\( 1+x+x^2=\frac{x^3-1}{x-1} \) 蜜桃多:\( x+x^3 ...

  8. Java SE 开篇

    一.  Java SE 开篇 1.  Java 基本数据类型及其对应的包装类 基本数据类型 对应的包装类 * byte Byte * boolean Boolean * char Character ...

  9. apicloud踩坑集锦

    最近在用apicloud开发,这里录入一些踩坑的地方,从头到尾,要多尴尬有多尴尬,新入app开发,记录一些心得,和遇到的坑以及解决办法. 1,apicloud 打包的Android app ,打开fr ...

  10. 用jdbc连接数据库并简单执行SQL语句

    一:版本一.这种存在一个问题就是每执行一次操作都会创建一次Connection链接和且释放一次链接 1:创建pojo对象(OR映射,一个pojo类对应一张数据库表)   package com.yin ...