> 基于实名制要求,**博客系统**以及**头像系统**将仅开放给信任用户使用,目前的计划是仅为ACM集训队队员开放。
> 如果你希望使用上述功能,请完善你在本网站的实名信息(真实姓名、联系方式),然后联系网站管理员或ACM集训队队长。
---
### 我的程序应该怎样输入输出?
你的程序应当使用标准输入(standard input, stdin)与标准输出(standard output, stdout)。例如,在 C 语言中你可以使用 `scanf` 进行输入,`printf` 进行输出;在 C++ 语言中你可以使用 `cin` 进行输入,`cout` 进行输出……
在本在线评测系统的评测过程中,程序的输入输出方式将会自动变更为文件输入输出(File IO),你**无需**对此进行任何额外操作,因此为了保证文件路径的正确性,**请勿在提交的代码中重复设置文件路径**,否则你的程序将会被评定为 `Runtime Error` 或是 `Wrong Answer`。
---
### 题目中有提到“多组数据,请处理到文件结束”,请问我的程序应当怎样实现?
由于在程序提交评测机进行评测时,采用的是文件输入输出的方式,因此在读完文件时,用于输入的函数会返回一个特殊值来代指接下来已经没有了输入。
对于 C 语言的 `scanf` 与 `getchar` 等函数而言,对应的特殊值为 `EOF`,或者说是 `-1`,因此你可以通过在 `while` 循环里输入并判断的方式来解决此问题:
```c
#include<stdio.h>
int main() {
int a;
while(scanf("%d", &a) != EOF) {
// ...
}
char c;
while((c = getchar()) != EOF) {
// ...
}
return 0;
}
```
对于 C++ 语言的 `cin` 与 `getline` 等方式而言,对应的特殊值为 `NULL`,或者说是 `0`,因此可以直接省略判断语句:
```cpp
#include<iostream>
#include<string>
using namespace std;
int main() {
int a;
while(cin >> a) {
// ...
}
string s;
while(getline(cin, s)) {
// ...
}
return 0;
}
```
---
### 评测结果分别代表什么意思?
- `Waiting`:你的程序正在提交并处理,但尚未进入评测机,请稍等片刻。
- `Compiling`:你的程序已提交至评测机,并正在编译成可执行二进制文件中。
- `Running`:你的程序已编译完成,评测机正在评测你的程序。
- `Accepted`:答案正确,恭喜你的程序通过了所有评测点!
- `Partial Accepted`:(仅 IOI/OI 赛制下存在)部分正确,你的程序通过了部分测试点,请继续尝试!
- `Compile Error`:编译错误,你的程序未能够通过编译,请检查程序在本地是否能够正确运行,并根据错误信息检查代码中的错误,或者检查是否在提交时选择了错误的语言。
- `System Error`:系统错误,请联系管理员排查并修复(多数发生在题目没有测试点,或是 Special Judge 运行异常时)。
- `Wrong Answer`:答案错误,你的程序在某些测试点上未能给出正确的结果。
- `Time Limit Exceed`:运行超时,你的程序在某些测试点上运行时无法在规定的时间范围内运行结束。
- `Memory Limit Exceed`:内存超限,你的程序在某些测试点上运行时使用了超过规定限制的内存。
- `Output Limit Exceed`:输出超限,你的程序输出的内容长度超出了系统的限制(大概率是运行时错误所导致)。
- `Runtime Error`:运行时错误,你的程序在某些测试点上运行时异常终止。
- 运行时错误的可能原因有很多,例如使用了未初始化的变量、数组越界、除零、栈溢出(C/C++语言在本评测系统上已对栈空间进行了优化,不大可能出现这种问题)等;
- 对于 C/C++ 语言,在本系统使用的 MinGW 12.2.0 环境下,对于**非 void 类型的函数如果没有返回值**,将可能出现以运行时错误作为基础的其它错误;
- **运行时错误可能会导致出现其它种类的错误**。因此在评测过程中如果在针对评测结果检查代码却一直找不到问题时,不妨往运行时错误上多想想。
- `Presentation Error`:格式错误,这表示你的程序输出的结果在忽略空白字符(例如空格、换行、制表符)的前提下是正确的,但在输出格式上与标准答案存在不同。自 2024/10/25 更新后开始,该类型结果将重新出现于本在线评测系统中。注意,对于**行末空格**以及**文件结尾的空白字符**,本系统是**不算在**格式错误内的,因此你可以放心输出行末空格或是文件结尾的换行等。
---
### 为什么我的程序本地通过编译了,并且样例也是正确的,可提交后却显示答案不正确?
在线评测系统中的每道题目都包含着一对或多对 `.in`/`.out` 文件用于测试你的程序是否正确,每对文件被称作一个测试点。
对于题库中的提交以及 ACM 赛制下的提交,只有在程序通过**所有的**测试点后才会被判定为“答案正确”。
而样例只是一个用来解释题目的输入格式以及输出格式的例子,通过样例并不代表代码就是正确的。
因此,请检查你的程序是否能够正确地处理题目**给定的数据范围内的所有可能情况**。
---
### 不同语言的时间限制与空间限制是相同的吗?
从公平性上讲,对于所有语言的时间限制应当是相同的,因为选择合适的编程语言也是一项必备技能。但就现实而言,不同语言之间的差距还是特别大的,尽管评测机已经对评测结果的波动进行了大量优化,但这些终究还是语言本身的问题。
因此对于空间限制,在理论上讲是相同的,但由于不同语言在开始运行时就需要占用的默认空间大小有所不同,因此在配置环境时会将这部分误差抹去(即在题目的空间限制基础上额外分配一定的空间以保证程序能够正常运行)。
而对于时间限制,目前仅为 Java 语言开放了 $2$ 倍的运行时长,而其余所有语言均是严格按照题目限制进行评定。
---
### 我能提交的代码最长长度是多少?程序允许的最多输出总长度是多少?
系统目前限制提交的代码长度不能超过 $32\text{KB}$,程序在一次运行过程中输出的总长度不能超过 $32\text{MB}$.
---
### 我的 C 语言程序本地能运行,但提交到系统评测后为什么编译失败?
- 如果你提交的是 C 语言,有可能代码表面上是按照 C 语言的标准编写的,实际上却掺杂了部分 C++ 的元素,而本地编译时是按照 C++ 标准编译运行的,因此会产生编译错误。请注意,C++ 语言是兼容 C 语言的,但 C 语言不支持 C++ 语言,因此可以尝试提交 C++ 语言。
- 如果你提交的是 C++ 20 版本,有可能部分写法或者使用的部分函数在 stdc++20 标准中被移除了,请自行注意。目前大部分算法竞赛推荐的版本为 stdc++17,当然也可以自行选择 11 或 14 的版本。
---
### 各种赛制的区别是什么?
目前我们 OJ 提供了四种不同的赛制,各赛制区别如下:
- `ACM/ICPC` 赛制下,提交后均会有实时反馈,每次提交必须通过全部测试点后才算正确通过,不通过的提交将会在之后通过本题时产生罚时。默认情况下每次错误提交产生的罚时为 20 分钟。排名以解题数多者优先,解题数相同时按罚时少者优先。
- `IOI` 赛制下,提交后均会有实时反馈,每次提交会按照预先设置的测试点分值求和给分,每道题取分值最多的一次提交作为最终得分,重复提交不会计算惩罚。排名以总分多者优先,总分相同时按总用时少者优先。
- `OI` 赛制下,提交后不会有实时反馈,每次提交会按照预先设置的测试点分值求和给分,重复提交取最后一次提交为准,比赛结束后统一进行判题。排名以总分多者优先,总分相同时按总用时少者优先。
- `~CF (Codeforces)` 赛制下,提交后均会有实时反馈,每次提交必须通过全部测试点后才算正确通过,每道题最终得分取自该题总分减去时间惩罚以及错误提交惩罚后的分值。排名以总分多者优先。