• 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. 在Main Thread中使用异步

    Whenever you first start an Android application, a thread called "main" is automatically c ...

  2. BZOJ_3998_[TJOI2015]弦论_后缀自动机

    BZOJ_3998_[TJOI2015]弦论_后缀自动机 Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行 ...

  3. Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找

    ylbtech-Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找 1.返回顶部 1. Java 实例 - 数组排序及元素查找  Java 实例 以下实例演示 ...

  4. node 中mongoose使用validate和密码加密的问题

    在今天一直被一个问题困扰,就算是使用mongoose的alidate的时候想要限制密码的位数,比如不能少于几位,但是一直出错. 最后发现原来使用validate的时候,是在数据将要存入数据库的时候,因 ...

  5. [软件安装]JDK

    一.软件简介1.java开发.java应用的系统基础环境2.软件版本会不同有少许差异,一般是稳定上升 二.安装环境:1.时间:2017年4月5日2.系统:centos7.3 64位(阿里云)3.软件版 ...

  6. 「vijos」lxhgww的奇思妙想(长链剖分)

    传送门 长链剖分的板子(又是乱搞优化暴力) 对于每一个点,我们定义它深度最深的子节点为它的重儿子(为什么不叫长儿子……),他们之间的连边为重边 然后长链剖分有几个性质 1.总链长为$O(n)$ 2.一 ...

  7. Neighbor House LightOJ - 1047

    Neighbor House LightOJ - 1047 #include<cstdio> #include<cstring> #include<algorithm&g ...

  8. L - Prime Number(求n内质数的个数)

    Description Write a program which reads an integer n and prints the number of prime numbers which ar ...

  9. C#扩展方法学习

    扩展方法的本质是什么,详细见此文 C#扩展方法,爱你在心口难开 重点如下:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法 ...

  10. Volley的初步了解

    Volley的介绍 Volley是什么? 2013年Google I/O大会上推出的网络请求和图片加载框架 其优点是api简单,性能优秀 非常适合数据量不大但是通信频繁的网络请求,而对于大数据量的操作 ...