TropicalFish OnlineJudge常见问答FAQ

帮助

评测

编译指令

C 使用 gcc 11.4.0 编译,命令为:
gcc Main.c -o Main -fno-asm -Wall -lm --static -O2 -std=c99 -DONLINE_JUDGE

C++ 使用 g++ 11.4.0 编译,命令为:
g++ -fno-asm -Wall -lm --static -O2 -std=c++17 -DONLINE_JUDGE -o Main Main.cc
您可以使用 #pragma GCC optimize ("O0") 手工关闭 O2 优化;

Pascal 使用 fpc 3.2.2 编译,命令为:
fpc Main.pas -oMain -O1 -Co -Cr -Ct -Ci

Java 使用 OpenJDK 17.0.4 编译,命令为:
javac -J-Xms64m -J-Xmx128m Main.java
如果您的代码中没有 public class,请将入口类命名为 Main,在评测时提供额外 2 秒的运行时间和 64MB 的运行内存。

机器配置

本OJ共有1个判题机:admin

判题机admin的机器CPU为Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz2核心,运行内存2GB,空判题任务时空闲内存约为1GB,硬盘大小为30G系统盘+15G测试数据盘。因此评测机配置过于**,所以请不要尝试暴力打表。

注意事项

请关注题目页面的文件读写规则,一般情况下,非比赛请用标准输出,虽然比赛也会用标准输入输出。

请留意!如果WA了,会进行答案校对,按字符得分。

Q: cin/cout为什么会超时(TLE)?

A: cin/cout因为默认同步stdin/stdout而变慢,并产生更多的系统调用而受到性能影响,可以在main函数开头加入下面代码加速:

ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

* 另外,请使用’\n’而不是 endl ,因为endl默认会增加刷新操作,而导致输出缓冲失效,降低效率。
* 另外,如果不使用IOS,您的代码可能在运行大于1e5的数据时就会TLE。
* 另外,如果您想避免这种问题,建议您使用scanf和printf。

Q: 为什么我用优化还是会超时(TLE)?

A: 试试在include之后加O2优化

#pragma GCC optimize ("O2");
#pragma GCC optimize ("O2");

* 另外,请使用’\n’而不是 endl ,因为endl默认会增加刷新操作,而导致输出缓冲失效,降低效率。

Q: gets函数没有了吗?

A: gets函数因为不能限制输入的长度,造成了历史上大量的缓冲区溢出漏洞,因此在最新版本中被彻底删除了,请使用fgets这个函数取代。或者使用下面的宏定义来取代:

#define gets(S) fgets(S,sizeof(S),stdin)

Q: [C/C++]为什么我的代码在本地正常,提交以后被判错?

A: 不要使用rewind来清空输入缓冲,OJ的输入本质是文件,与键盘输入逻辑不一样。如果你发现别人可以正确完成问题,那么有可能是你的代码没有考虑到所有的情况。并不是通过样例数据就代表一定是正确答案。如果你发现所有人都不能正确提交该题,那么有可能是测试数据有问题,请向管理员反馈。

Q: [C++]为什么我的代码在本地正常,提交以后被判OLE、RE、WA?

  • A: 因为评测机特性,您的非void子函数必须要有返回值。
  • Emmm,其实你自己写的namespace也要返回值!
  • Emmm,如果你在洛谷提交用自己的namespace代码,发现TLE、RE,那么极有可能是因为你的子函数没有返回值哈哈哈!
  • 个人资料

    本站不提供头像存储服务,而是使用 QQ 头像显示。请使用QQ邮箱注册 ,系统自动取用您在QQ的头像。

    返回结果说明

    试题的解答提交后由评分系统评出即时得分,每一次提交会判决结果会及时通知;系统可能的反馈信息包括:

  • 等待评测:评测系统还没有评测到这个提交,请稍候
  • 正在评测:评测系统正在评测,稍候会有结果
  • 编译错误:您提交的代码无法完成编译,点击“编译错误”可以看到编译器输出的错误信息
  • 答案正确:恭喜!您通过了这道题
  • 格式错误:您的程序输出的格式不符合要求(比如空格和换行与要求不一致)
  • 答案错误:您的程序未能对评测系统的数据返回正确的结果
  • 运行超时:您的程序未能在规定时间内运行结束
  • 内存超限:您的程序使用了超过限制的内存
  • 运行错误:您的程序在运行过程中崩溃了,发生了如段错误、浮点错误等
  • 输出超限:您的程序输出了过多内容,一般可能是无限循环输出导致的结果
  • 程序样例

    以下样例程序可用于解决这道简单的题目:读入2个整数A和B,然后输出它们的和。

    gcc (.c)

    #include <stdio.h>
    int main(){
        int a, b;
        while(scanf("%d %d",&a, &b) != EOF){
            printf("%d\n", a + b);
        }
        return 0;
    }

    g++ (.cpp)

    #include <iostream>
    using namespace std;
    int main(){
        // io speed up
        const char endl = '\n';
        std::ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        int a, b;
        while (cin >> a >> b){
            cout << a+b << endl;
        }
        return 0;
    }

    fpc (.pas)

    var
    a, b: integer;
    begin
        while not eof(input) do begin
            readln(a, b);
            writeln(a + b);
        end;
    end.

    javac (.java)

    import java.util.Scanner;	
    public class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            while (in.hasNextInt()) {
                int a = in.nextInt();
                int b = in.nextInt();
                System.out.println(a + b);
            }
        }
    }

    python3 (.py)

    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]))

    仓颉 (.cj)

    import std.core.*
    import std.console.*
    import std.collection.*
    import std.convert.*
    
    main(): Int64 {
        while (let Some(line) <- Console.stdIn.readln()) {
            let nums = map(Int.parse)(line.split(" "))
            let sum = reduce({a: Int64, b: Int64 => a + b})(nums)
            if (let Some(r) <- sum) {
                Console.stdOut.writeln(r)
            }
        }
        return 0
    }

    © 版权声明
    THE END
    喜欢就支持一下吧
    点赞7 分享
    评论 抢沙发

    请登录后发表评论

      暂无评论内容