Thắc mắc thường gặp


1. Tôi không hiểu về nhận xét bài nộp của tôi (AC, WA, RTE...)

Dưới đây là các mã trạng thái bài làm trên HNOJ và giải thích của chúng. Lưu ý rằng một test case có thể gặp nhiều mã trạng thái khác nhau (dĩ nhiên, trong trường hợp bài nộp chưa chính xác hoàn toàn), khi đó trạng thái ưu tiên cao nhất (từ trên xuống dưới) sẽ được hiện.

1. AC (Accepted) - Kết quả đúng

Chúc mừng! Bài làm của bạn đã được cho là đúng. Lưu ý, trong một số trường hợp có thể kèm theo nhận xét phụ.

2. WA (Wrong Answer) - Đáp án sai

Chương trình của bạn chạy thành công, tuy nhiên cho ra đáp án chưa chính xác. Lưu ý, trong một số trường hợp có thể kèm theo nhận xét phụ chỉ rõ lý do bài nộp bị sai.

3. IR (Invalid Return) - Trả về không hợp lệ

Chương trình của bạn trả về giá trị khác 0 (non-zero exit code). Nếu bạn khống sử dụng các ngôn ngữ native như C++ thì chương trình sẽ bị ngưng hoạt động. Với các ngôn ngữ khác như Python hay Java thì đi cùng thường sẽ là các lỗi tương ứng mà chương trình đưa ra (NameError hoặc java.lang.NullPointerException)

4. RTE (Runtime Error) - Lỗi thực thi

Chương trình của bạn cho ra một lỗi thực thi. Lỗi này thường chỉ xảy ra khi bạn sử dụng các ngôn ngữ native như C hay C++. HNOJ có liệt kê các lỗi thực thi thường gặp như dưới:

Nhận xét Giải thích
segmentation fault, bus error Chương trình bị buộc dừng lại do SIGSEGV hoặc SIGBUS. Thông thường, điều này là do bạn sử dụng quá bộ nhớ cho phép, hoặc truy cập vào vị trí mảng nằm ngoài giới hạn.
floating point exception Chương trình của bạn xử lý phép tính không hợp lệ, ví dụ như chia cho 0.
killed Chương trình của bạn bị buộc dừng lại bởi trình thực thi, vì một lý do nào đó (mà HNOJ không thể nhận ra).
opening files is not allowed Trừ khi bài yêu cầu nhập/xuất file, bạn tuyệt đối không nên nhập/xuất file vì làm vậy dẫn đến lỗi này.
{} syscall disallowed Trừ khi bạn làm gì đó bất thường, bạn chắc chắn không thể nhìn thấy lỗi này. Nếu lỗi này xảy ra liên tục, hãy liên hệ quản trị viên của HNOJ để giải quyết.
std::bad_alloc Hàm new của C++ không thể cấp phát đủ bộ nhớ trong khi chạy. Lỗi thường xảy ra khi khởi tạo quá giới hạn cho phép.
failed initializing Chương trình của bạn sử dụng quá nhiều dữ liệu cho biến cục bộ, dẫn đến việc sử dụng bộ nhớ quá giới hạn cho phep. Một ví dụ điển hình là như sau:
int arr[10000][10000];
Với một bài có giới hạn 64mb, mảng trên sẽ sử dụng 381mb, vượt xa giới hạn cho phép.
5. OLE (Output Limit Exceeded) - Quá giới hạn xuất

Chương trình của bạn in quá nhiều ra stdout. Thông thường giới hạn này là 256MB trừ khi được đặt cụ thể theo từng bài.

6. MLE (Memory Limit Exceeded) - Quá giới hạn bộ nhớ

Chương trình của bạn sử dụng quá nhiều bộ nhớ. Đôi khi, chương trình của bạn có thể đưa ra biểu hiện RTE như segmentation fault hoặc std::bad_alloc

7. TLE (Time Limit Exceeded) - Quá giới hạn thời gian

Chương trình của bạn sử dụng quá nhiều thời gian để chạy.

8. IE (Internal Error) - Lỗi cục bộ

Nếu bạn thấy lỗi này, thì do máy chấm của HNOJ đang gặp vấn đề, hoặc cấu hình của bài đang bị sai. Quản trị viên sẽ được thông báo qua email khi lỗi này xảy ra, vì vậy bạn không cần làm gì cả và có thể thử lại sau.

2. Tổng điểm của tôi không khớp so với các bài đã làm

HNOJ sử dụng hệ thống tính điểm theo trọng lượng - Bài khó hơn sẽ được thưởng nhiều điểm hơn. Hệ thống này được đưa vào nhằm tăng tính công bằng và khuyến khích các bạn thử sức bài khó hơn.

Các bạn có thể xem công thức tính điểm chi tiết tại đây.

Lưu ý rằng các bài trên HNOJ chưa được phân loại rõ ràng, vì vậy độ khó và điểm của các bài có thể sẽ không đồng nhất với nhau.