目录

问:第一次使用此系统,应该如何开始?

问:我有什么操作权限?用户之间有区别吗?

问:提交完代码后系统返回了结果,那些结果分别是代表什么意思呢?

问:系统使用的编译环境是怎样的?需要特别注意什么吗?能给我一些范例程序吗?

问:有些题目要求“多组测试数据”,我应该怎样处理这样的数据输入?

问:有些题目标有“Special Judge”,这是什么意思呢?

问:我接触了一道很有趣的题目,想上传到系统上和大家共享,应该这么做?

问:内部比赛是指什么?如何报名?

问:系统的程序设计月赛如何组织?有没有参赛的奖励措施?

问:我可以在系统上自行组织在线比赛吗?该如何做?

 

正文

问:第一次使用此系统,应该如何开始?

答:你可以按照如下步骤(当然不必每个步骤都做)开始——

1、选择浏览器

本系统使用CSS组织页面,在不同的浏览器中显示效果会有不同,推荐使用Firefox浏览本系统,可以达到最佳的浏览效果,点此下载Firefox

2、选择编程工具

本系统的C和G++分别使用GCC和G++编译器,与常用的VC编译器有些许不同,推荐使用Dev-C++编写C/C++程序,这样可避免不必要的Compile Error,点此下载Dev-C++

3、注册帐号

可以点此注册您的帐号

注意

1、本系统不支持中文用户名,邮箱可选填;

2、左右铭( Nick Name )为用户的个性表现,所有选择一个有个性的左右铭吧(也可不填);

3、系统内置两者语言界面(中、英),可在注册时选择,以后系统将自动根据你的选择显示界面语言;

4、用所注册的用户名登陆系统。

5、从“题目列表”中选择题目,阅读题目描述及输入输出格式。

点此选择题目

6、设计可行的算法解答题目,在自己的熟悉的IDE,如VC中写好程序并确认正确通过样例测试;

7、点击题目最下方的“提交”按钮进入代码提交窗口,选择运行语言(关于运行语言请看下文解释,提交代码。系统会自行编译运行并测试用户程序,并给出运行结果(关于运行结果请看下文解释(状态窗口默认为一分钟自动刷新一次,如果觉得太慢,可以自己刷新运行结果窗口以便及时获知运行结果)。

到此你已经学会了一般在线评判系统通用(也是最基本)的功能,当然,NOJ还有其他许多贴近用户的功能,请自行查看其他部分说明。

问:我有什么操作权限?用户之间有区别吗?

答:一般来说,如果不注册用户名,你仍能浏览本系统大部分的页面,只是本系统本身并不是单纯的一个网站——系统为注册用户设置了授权机制,不同的用户拥有不同的权限,目前的用户角色及权限设置如下:

普通用户:任何用户注册的初始账户均为普通用户,普通用户的权限——可以做题,提交解答并得到系统的评判和结果反馈;参与用户排名;拥有并可使用自己的站内信箱;可以查看、保存自己提交的源代码并可对其进行全文搜索;可以在讨论版发贴;可以参加比赛,察看比赛结果的统计图表(包括个人比赛过程的图表)……

高级用户:任何在本系统解答题目超过20道的用户,将自动升级为高级用户,高级用户的权限——拥有普通用户所有权限,同时可以上传题目,包括测试数据,并可对自己上传的题目进行管理,修改,试提交等。上传的题目,经管理员确认,将加入系统的正式题库,成为NOJ题库的一部分,系统将在题目信息中记录上传题目者的相关信息。

论坛版主:论坛版主为系统管理员授予,版主的权限——拥有普通用户的所有权限,同时对相应的论坛版块拥有管理权,目前可用的管理权是删除用户发帖。

系统管理员:系统管理员管理系统的日常运行,拥有所有的管理权限。

问:提交完代码后系统返回了结果,那些结果分别是代表什么意思呢?

答:程序各种运行结果的含义如下:

Waiting: 系统正在做评判的准备工作。

平时(非比赛时)系统将同时启用三个评判进程评判用户程序,但如果用户的并行提交数量过大,系统将对后面的提交进行排队,这时这些提交都会暂时显示Waiting的结果;

Judging: 系统正在评判你的程序。

如果显示这个结果,一般最迟几秒钟后您就能看到最终的评判结果了;

Accepted: 你的解答是正确的,恭喜!!

注意这里的“正确”是指您的程序正确通过了本题所提供的测试数据测试,由于测试数据很难全面考虑到问题的所有方面,所以有可能一个考虑得不够完善的程序也会返回Accepted

Presentation Error: 输出时表达错误。

如果看到这样的结果,说明你的程序已经基本正确了,只是多打了换行符或多输出了空格,检查一下你的程序和题目要求吧,胜利就在眼前!

Wrong Answer: 你的程序正常运行并输出了结果,不过是答案错误……

Runtime Error: 你的程序正常编译,不过运行时发生错误。

此结果一般是由于数组越界,指针操作违法等,系统会详细报告下列几种Runtime Error ——

Runtime Error(ARRAY_BOUNDS_EXCEEDED)     //数组越界
Runtime Error(DIVIDE_BY_ZERO)            //除零
Runtime Error(ACCESS_VIOLATION)          //非法内存访问
Runtime Error(STACK_OVERFLOW)            //堆栈溢出

Time Limit Exceeded: 在题目规定的时间内你的程序没能输出答案,一般是由于设计的算法效率不够高;

Memory Limit Exceeded: 你的程序申请了太多的内存,超出题目限制;

Output Limit Exceeded:你的程序往控制台输出了太多信息,请检查程序是否死循环,系统对输出的默认限制是 1024KByte,个别题目会有不

Compile Error: 编译错误,请查看系统反馈的编译信息;

System Error:系统错误,这种结果一般是由于系统设计时没有考虑到的意外事件所致,如果系统反馈了这样的结果,请告知管理员;

以下两个为Special Judge题目特有,一般与Judge程序不够健壮有关(当然很大的可能用户的结果是错误的),如发现这样的反馈,请告知管理员:

Judge Delay:评判时间过长,强制终止评判 。

Judge Error:一般不会发生这样的错误,因为这代表Judge程序本身是错的,不过有备无患吧^_^。

问:系统使用的编译环境是怎样的?需要特别注意什么吗?

答:本系统内置五种编译环境,支持C,C++ ,Java,Pascal 四种语言,有关编译器的注意事项有:

1、GCC,,G++ 分别为GNU组织提供的C 和C++语言的编译器,与常用的VC有少许不同,主要有main 函数必须返回int 类型的数据,如1001题解答如下:

G++:

#include <iostream>

using namespace std;

int main()

{

int a,b;

cin >> a >> b;

cout << a+b << endl;

return 0;

}

GCC:

#include <stdio.h>

int main()

{

int a,b;

scanf("%d %d",&a, &b);

printf("%d\n",a+b);

return 0;

}

2、Java有两个编译器(虚拟机),一个为传统的Sun Java,另一个是GNU Java Compiler(GCJ),二者的不同在于,Sun Java 在虚拟机中运行用户程序,而GCJ 则通过把.class文件转化为本地的可执行代码(在Windows下为.exe 文件)实现了类似于C/C++的脱离虚拟机运行,之于上面的区别,GCJ编译后的程序运行时会比Sun Java 快(实测大概有30%的速度差距);

另外需要注意的是,GCJ 目前只支持 Java 1.4 ,如果使用Java 1.5,则只能使用Sun Java。

Java 解答1001 题代码如下:

Java 1.4

import java.io.*;
import java.util.*;

public class Main
{
public static void main (String args[]) throws Exception
{
BufferedReader stdin =
new BufferedReader(
new InputStreamReader(System.in));

String line = stdin.readLine();
StringTokenizer st = new StringTokenizer(line);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(a+b);
}
}

Java 1.5

import java.io.*;
import java.util.*;
public class Main
{
public static void main(String args[]) throws Exception
{
Scanner cin=new Scanner(System.in);
int a=cin.nextInt(),b=cin.nextInt();
System.out.println(a+b);
}
}

3、Pascal 对 1001 题的解答

program p1000(Input,Output);

var

a,b:Integer;

begin

Readln(a,b);

Writeln(a+b);

end.

问:有些题目要求“多组测试数据”,我应该怎样处理这样的数据输入?

答:多组数据输入的问题:

部分题目会说明如“多组数据,第一行为一个整数 N ,第二行为 N 个不超过100的正整数,用空格隔开。 ”等,解答此类问题时,数据输入的写法可以参照如下:

while(scanf("%d",&n)==1)
{

}

while(cin>>n)

{

}

具体可参照1026题的例解


问:有些题目标有“Special Judge”,这是什么意思呢?

答:有的题目可能会有答案不唯一的情况,这时会使用一个Special Judge程序提取用户的答案并判断对错,用户无须知道Special Judge的评判细节,只有一个需要注意的地方,即为简化评判,Special Judge程序一般不评判Presentation Error,请务必保证输出格式的正确。

问:我接触了一道很有趣的题目,想上传到系统上和大家共享,应该这么做?

答:为保证题目的质量,要上传题目,首先您必须以在系统上解答了20道以上的题目。如果您满足这个条件——

1、您可以点此上传题目

注:如果需要,你可以上传与题目搭配的图片,图片尺寸最大为64K。

2、你可以自行生成一定数量的测试数据,点击题目描述下方的链接进入测试数据上传界面,上传测试数据;

注:关于测试数据有几点:输入数据必须是.in后缀的文本文件,输出数据必须是.out后缀的文本文件;系统支持多组测试数据文件,系统将以文件名的字母表顺序依次读取各组测试数据,请自行保证各组测试数据的对应(最好的方法是输入数据文件和输出数据文件采用同样的文件名,如data1.in 对应data1.out,data2.in 对应 data2.out);非管理员上传测试数据,单个文件最大为1M,如果你需要上传更大的测试数据,请联系管理员代为上传;系统不支持非管理员上传Specail Judge程序,如果您需要上传Special Judge的题目,请与管理员联系。

3、点击题目下方的查看测试数据链接,你可以检查并管理(删除)您上传的测试数据文件。通过这个可以检查文件是否对应和完整。

4、题目及测试数据上传完毕后,你可以自行提交代码测试你的题目及程序,并适当更改题目的描述及限制(通过题目描述下方的编辑链接),直到题目的各方面满足要求。

5、如果题目符合要求,管理员将把题目加入系统公共题库,题目的Uploader位置将留给题目的上传者。题目一旦加入系统题库,只有系统管理员有权对其进行编辑更改。

问:内部比赛是指什么?如何报名?

答:本系统的在线比赛分为两种:公开赛和内部赛,公开赛对所有访问者公开,任何人均可参加,内部赛只面向部分用户开放(具体参赛名额由管理员决定)。

问:系统的程序设计月赛如何组织?有没有参赛的奖励措施?

答:

关于程序设计网上月赛

月赛规则(针对校内用户,2007年4月暂定)

为增加比赛的趣味性,比赛将采用有奖比赛的形式,具体的实施有两种:

1、任何拥有本系统用户名的用户均可参赛(用户名可自己注册获得);

2、请参赛用户在比赛结束前将自己的比赛代号更改为自己的学号或姓名(比赛代号在比赛主页的右上角更改,比赛结束后不能更改),或者通过站内信将你的学号(姓名)发给用户Contest,以便我们赛后颁发奖状及发放奖金。否则将视为匿名参赛,不参与比赛的评奖。

3、关于比赛奖金,将结合正式报名人数决定。

4、我们已申请学校有关部门的经费支持,如果经费足够,将对所有参与答题的人进行评奖并颁发奖金(奖状);

5、如果无法得到足够的经费,为确保奖金的发放,我们将对参赛选手进行划分,即:比赛不排斥任何人参加,所有南航的学生都可以参与答题,成绩优异者将颁发奖状,另外,对CCPA(Computer Competition & Practice Association)会员及缴纳参赛报名费的正式参赛者(参赛报名费将完全作为比赛奖金发还给参赛者),我们还将设立一定的名额发放比赛奖金。

我们将把比赛作为每月必办的联赛,希望对程序设计感兴趣的同学积极参加。

Enjoy it!

问:我可以在系统上自行组织在线比赛吗?该如何做?

答:如果想组织在线比赛,你需要联系管理员。一般情况下,请先上传好题目和测试数据,然后,联系管理员,告知你需要的比赛时间,如果要求获得通过,您将看到自己的比赛出现在系统主页的“比赛预告”里。系统支持最多8场比赛同时举行。

|返回 |