Recent submission : 221/day .

新闻

faqs.cn-zhblue

Q:这个在线裁判系统使用什么样的编译器和编译选项?
A:系统运行于Debian/Ubuntu Linux. 使用GNU GCC/G++ 作为C/C++编译器, Free Pascal 作为pascal 编译器 ,用 openjdk 编译 Java. 对应的编译选项如下:

C: gcc Main.c -o Main -fno-asm -Wall -lm --static -std=c99 -DONLINE_JUDGE
#pragma GCC optimize ("O2")
可以手工开启O2优化
C++: g++ -fno-asm -Wall -lm --static -std=c++11 -DONLINE_JUDGE -o Main Main.cc
Pascal: fpc Main.pas -oMain -O1 -Co -Cr -Ct -Ci
Java: javac -J-Xms64m -J-Xmx128m -encoding UTF-8 Main.java
*Java has 10 more seconds and 64M more memory when running and judging.

编译器版本为(系统可能升级编译器版本,这里仅供参考):
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
glibc 2.19
Free Pascal Compiler version 2.6.2-8
openjdk version "1.8.0_222"



Q:程序怎样取得输入、进行输出?
A:你的程序应该从标准输入 stdin('Standard Input')获取输入,并将结果输出到标准输出 stdout('Standard Output').例如,在C语言可以使用 'scanf' ,在C++可以使用'cin' 进行输入;在C使用 'printf' ,在C++使用'cout'进行输出.

用户程序不允许直接读写文件, 如果这样做可能会判为运行时错误 "Runtime Error"。

下面是 1000题的参考答案

C++:

#include <iostream>
using namespace std;
int main(){
    int a,b;
    while(cin >> a >> b)
        cout << a+b << endl;
    return 0;
} 
C:
 #include <stdio.h>
int main(){
    int a,b;
    while(scanf("%d %d",&a, &b) != EOF)
        printf("%d\n",a+b);
    return 0;
} 
PASCAL:
 program p1001(Input,Output); 
var 
  a,b:Integer; 
begin 
   while not eof(Input) do 
     begin 
       Readln(a,b); 
       Writeln(a+b); 
     end; 
end. 


Java:
 import java.util.*;
public class Main{
	public static void main(String args[]){
		Scanner cin = new Scanner(System.in);
		int a, b;
		while (cin.hasNext()){
			a = cin.nextInt(); b = cin.nextInt();
			System.out.println(a + b);
		}
	}
}
Python3
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
for line in sys.stdin:
    a = line.split()
    print(int(a[0]) + int(a[1]))



Q:为什么我的程序在自己的电脑上正常编译,而系统告诉我编译错误!
A:GCC的编译标准与VC6有些不同,更加符合c/c++标准:
  • main 函数必须返回intvoid main 的函数声明会报编译错误。
  • i 在循环外失去定义 "for(int i=0...){...}"
  • itoa 不是ansi标准函数.
  • __int64 不是ANSI标准定义,只能在VC使用, 但是可以使用long long声明64位整数。
    如果用了__int64,试试提交前加一句#define __int64 long long, scanf和printf 请使用%lld作为格式

Q:系统返回信息都是什么意思?
A:详见下述:

等待 : 系统忙,你的答案在排队等待.

等待重判: 因为数据更新或其他原因,系统将重新判你的答案.

编译中: 正在编译.

运行并评判: 正在运行和判断,如果卡在这个状态很久,可能是判题机故障或者测试数据缺失。

答案正确: 程序通过!

格斯错误: 答案基本正确,但是格式不对。

答案错误 : 答案不对,仅仅通过样例数据的测试并不一定是正确答案,一定还有你没想到的地方.

时间超限 : 运行超出时间限制,检查下是否有死循环,或者应该有更快的计算方法。

内存超限 : 超出内存限制,数据可能需要压缩,检查内存是否有泄露。

输出超限: 输出超过限制,你的输出比正确答案长了两倍.

运行错误 : 运行时错误,非法的内存访问,数组越界,指针漂移,调用禁用的系统函数。请点击后获得详细输出。

编译错误 : 编译错误,请点击后获得编译器的详细输出。


Q:如何参加在线比赛?
A:注册 一个帐号,然后就可以练习,点击比赛列表Contests可以看到正在进行的比赛并参加。
软件下载-zhblue
从C到Java的小贴士-zhblue


这学期又要给网工同学上Java课了,先在这里写一点tips要点。

  1. public static void main(String []args) 是死规定,没有为什么。
  2. [  ]是一种对象,自带.length
  3. 所有方法都写成static的,可以在java的对象里面写过程式程序。
  4. String不是char[],汉字也不是两个字节,”中文”.length()==2
  5. java.util.*是入门的必经之路,熟悉里面的List/Vector/Collections等常用工具类可以顺利解决大部分问题。
  6. switch在7之后可以用String类型(新OJ是openjdk7,已支持)
  7. Integer.parseInt()   Double.parseDouble()  String.valueOf() 是常见数据类型转换工具。
  8. System.out.format System.out.printf 用起来跟stdio.h的printf是一样的。
  9. String.format()可以快速高效的拼接字符串。
  10. String是个final类,不能继承,这是有意为之。
  11. OJ上做题只有Main这个类可以是public,其他类不能用public。
  12. new Scanner(System.in)这个操作只能做一次。
  13. scanner.next()之后如果当前输入位置在行尾,nextLine()将只能得到一个””。
  14. 有的题用Scanner.nextLine()+String.split(” “)处理起来编码效率最高

 


瞿老师讲座ppt-zhblue
新人须知-zhblue
1、本系统使用标准GCC/G++编译器,因此对于c++要求使用int main()而不能用void main(),否则报编译错误。
2、因为采用黑箱测试原理,所以必须按照题目要求进行输入输出。
未经题目允许输出提示性语句“请输入”、"please input"之类一律判为错误答案。
输出时空格、回车、制表符等空白符号数量、位置不符合题目要求,一律判为格式错误。
3、提交前请使用题目提供的“样例数据”在自己的电脑上进行测试。
如果程序输出与样例有差异,哪怕一个空格的差异,都不会判为正确。
4、最好使用文件设定测试数据来调试程序:

调试程序时往往需要反复输入测试数据,为了提高效率、防止出错,可以把每次需要输入的数据放在in.txt文件里,用于测试。

===============================
c/cpp版
============================================
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif

===========================
Java版
============================================
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner in = null;
try {
in = new Scanner(new FileInputStream("in.txt"));
} catch (Exception e) {
in = new Scanner(System.in);
}
while (in.hasNext()) {
......
}
}
}

原理参考:http://blog.csdn.net/ll365594480/article/details/6406998