常见问题及解答

English


问:为什么系统提示我无法上传题目?

答:只有超级管理员和高级用户(在本系统解答题目超过300道)才允许上传题目。


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

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

Waiting: 系统正在做评判的准备工作,这个过程不会太久,请您稍等片刻再刷新浏览器

Judging: 系统正在评判你的程序,最多几秒钟后您就能看到最终的评判结果

Accepted: 您的程序是正确的,恭喜!

Presentation Error: 虽然您的程序貌似输出了正确的结果,但是这个结果的格式有点问题。请检查程序的输出是否多了或者少了空格(' ')、制表符('\t')或者换行符('\n')。

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

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:你的程序往控制台输出了太多信息,请检查程序是否死循环 。

Compile Error: 您的程序语法有问题,编译器无法编译。具体的出错信息可以点击链接查看。

System Error: OJ内部出现错误。由于我们的OJ可能存在一些小问题,所以出现这个信息请原谅,同时请及时与管理员联系。

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

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

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


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

答:本系统运行于Windows平台,内置五种编译环境,支持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.


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

答:举例说明多组数据输入的问题如下

题号:1002

解答:

#include <stdio.h>

int main()

{

    int n,i,a,b;

    scanf("%d",&n); /*先输入测试组数*/

    for(i=0;i<n;i++)

    {

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

        if(a>b)

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

        else

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

    }

}

题号:1076

说明:

1、样例输入了“1 2”和“3 4”两行,但这只是“样例”,实际可能有很多行;

2、样例输出为“3”和“7”,分别对应样例输入的“1 2”和“3 4”,

但要注意:不要以为输入完成后,才开始输出;而是:输入一行“1 2”后输出一行“3”,

再输入一行“3 4”,输出“7”,直到结束;

因为“1 2”和“3 4”两行是无关的,属于两组独立的测试用例。

解答:

#include <stdio.h>

int main() /*注意这里需要 int 类型,并非“void main()”*/

{

    int a,b;

    while(scanf("%d %d",&a,&b)!=EOF) /*判断输入是否结束*/

    {

        printf("%d\n",a+b); /*每接受一行输入后,马上运算,把结果输出*/

    }

}

=========================

题号:1077

解答:

#include <stdio.h>

int main()

{

    int n,i,a,b;

    scanf("%d",&n); /*先输入测试组数*/

    for(i=0;i<n;i++)

    {

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

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

    }

}

=========================

题号:1078

解答:

#include <stdio.h>

int main()

{

    int a,b;

    while(1)

    {

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

        if(a==0 && b==0)break; /*输入结束标志*/

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

    }

}

或利用逗号表达式,简化判断:

#include <stdio.h>

int main()

{

    int a,b;

    while(scanf("%d %d",&a,&b), a!=0 || b!=0)

    {

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

    }

}

=========================

题号:1079

解答:

#include <stdio.h>

int main()

{

    int a,b,k=0;

    while(1)

    {

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

        if(a==0 && b==0)break; /*输入结束标志*/

        if(k)printf("\n"); /*每组数据之间保留一个空行*/

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

        k=1;

    }

}

或:

#include <stdio.h>

int main()

{

    int a,b,k=0;

    while(scanf("%d %d",&a,&b), a!=0 || b!=0)

    {

        if(k)printf("\n"); /*每组数据之间保留一个空行*/

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

        k=1;

    }

}


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

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


问:我想参加TZOJ的在线比赛,如何参加比赛呢?

答:TZOJ两种类型的比赛:一种是public公开比赛,另外一种是private内部比赛。所有注册用户均可以参加公开的比赛, 内部比赛需要用户报名并通过管理员审核才可以参加。
 


问:如何使用64位整数类型?

答:服务器支持64位有符号和无符号类型的整数。

  • 有符号型64位整数,值域为:-9223372036854775808 .. 9223372036854775807。

     
    语言 GNU C/C++ Pascal
    类型名称 __int64 int64
    输入方法 scanf("%I64d", &x); read(x);
    输出方法 printf("%I64d", x); write(x);

     
  • 无符号型64位整数,值域为:0 .. 18446744073709551615。

     
    语言 GNU C/C++ Pascal
    类型名称 unsigned __int64 qword
    输入方法 scanf("%I64u", &x); read(x);
    输出方法 printf("%I64u", x); write(x);
|返回 |
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.