Quản lý bài tập
LCOJ cung cấp giao diện web để tạo và chỉnh sửa bài tập, bao gồm cả đề bài và test data.
Cấu hình
Với Docker (khuyến nghị)
Test data được lưu trong thư mục dmoj/problems/ và tự động mount vào container.
Không cần cấu hình thêm, đã được setup sẵn trong Docker.
Với bare metal
Trong local_settings.py, đặt DMOJ_PROBLEM_DATA_ROOT:
DMOJ_PROBLEM_DATA_ROOT = '/home/lcoj/problems'Thêm bài tập mới
Bước 1: Truy cập trang quản trị
Truy cập /admin/ và đăng nhập bằng tài khoản admin.
Bước 2: Tạo bài tập
Click nút Add ở mục Problems.

Bước 3: Điền thông tin cơ bản
Thông tin bắt buộc:
- Problem code: Mã bài tập (phải unique, ví dụ:
APLUSB) - Title: Tên bài tập (ví dụ: "Tổng hai số")
- Authors: Quan trọng! Phải thêm bản thân làm tác giả, nếu không sẽ không chỉnh sửa được bài

Bước 4: Viết đề bài
LCOJ hỗ trợ Markdown với các tính năng mở rộng:
- LaTeX cho công thức toán học
- Syntax highlighting cho code
- Hình ảnh, bảng biểu
Ví dụ đề bài:
# Đề bài
Cho hai số nguyên $a$ và $b$. Hãy tính tổng của chúng.
## Input
Một dòng chứa hai số nguyên $a$ và $b$ ($-10^9 \le a, b \le 10^9$).
## Output
In ra một số nguyên duy nhất là $a + b$.
## Ví dụ
### Input
```
3 5
```
### Output
```
8
```
## Giới hạn
- Thời gian: 1 giây
- Bộ nhớ: 256 MBXem template đầy đủ.
Bước 5: Cấu hình bài tập
Các tùy chọn quan trọng:
- Time limit: Giới hạn thời gian (giây)
- Memory limit: Giới hạn bộ nhớ (KB)
- Points: Điểm của bài (thường 100)
- Partial: Cho phép điểm thành phần
- Group: Nhóm bài tập
- Types: Loại bài (DP, Graph, Math, ...)
- Allowed languages: Ngôn ngữ được phép
Bước 6: Lưu và xem
Click Save, sau đó click View on site để xem bài tập.

Quản lý test data
Bước 1: Mở trình chỉnh sửa test data
Trên trang bài tập, click Edit test data.

Bước 2: Upload test data
Chuẩn bị file zip chứa test data. Quy ước đặt tên:
<problem_code>.<test_number>.in # File input
<problem_code>.<test_number>.out # File outputVí dụ: Bài APLUSB:
APLUSB.1.in
APLUSB.1.out
APLUSB.2.in
APLUSB.2.out
APLUSB.3.in
APLUSB.3.outUpload file zip lên hệ thống.

Bước 3: Cấu hình test cases
Các trường quan trọng:
- Input file: Đường dẫn file input trong zip
- Output file: Đường dẫn file output trong zip
- Points: Điểm của test case
Ví dụ cấu hình:
Test 1: APLUSB.1.in, APLUSB.1.out, 30 điểm
Test 2: APLUSB.2.in, APLUSB.2.out, 30 điểm
Test 3: APLUSB.3.in, APLUSB.3.out, 40 điểmTính điểm
Nếu bật Partial points:
Công thức:
Điểm = (Tổng điểm test đúng / Tổng điểm tất cả test) × Điểm bàiVí dụ:
- Bài 100 điểm
- 3 test: 1/2/7 điểm
- Thí sinh đúng test 1 và 2, sai test 3
- Điểm = (1+2)/(1+2+7) × 100 = 30 điểm
Batched test cases
Dùng cho bài có subtask. Phải đúng tất cả test trong subtask mới được điểm.
Cách tạo:
- Click Add batch
- Đặt điểm cho batch
- Thêm các test case vào batch
Ví dụ:
Batch 1 (30 điểm):
- Test 1.1
- Test 1.2
Batch 2 (70 điểm):
- Test 2.1
- Test 2.2
- Test 2.3Checker tùy chỉnh
Nếu bài có nhiều đáp án đúng, cần dùng custom checker.
Các checker có sẵn:
standard: So sánh chính xác (mặc định)floats: Cho phép sai số số thựcsorted: Bỏ qua thứ tựidentical: So sánh từng ký tự
Cách chọn checker:
Trong phần Checker, chọn checker phù hợp và cấu hình tham số.
Generator
Nếu có nhiều test, có thể dùng generator thay vì upload file.
Cách dùng:
- Upload file generator (C/C++)
- Cấu hình tham số cho mỗi test
- Hệ thống tự động tạo input/output
Xem thêm: Generator
Nộp bài thử
Sau khi tạo xong test data, quay lại trang bài tập và click Submit solution để thử nộp bài.
Cập nhật test data
Nếu cần sửa test data:
- Truy cập Edit test data
- Upload file zip mới hoặc chỉnh sửa cấu hình
- Click Save
- Test data sẽ tự động cập nhật
Rejudge
Sau khi sửa test data, nên rejudge các bài nộp cũ:
- Vào trang bài tập
- Click Rejudge all submissions
- Chọn phạm vi rejudge (tất cả hoặc từ thời điểm nào đó)
Tips
- Đặt tên test rõ ràng: Dễ quản lý và debug
- Test đầy đủ: Bao gồm edge cases, corner cases
- Kiểm tra output: Đảm bảo output chuẩn đúng
- Thử nhiều ngôn ngữ: Test với C++, Python, Java
- Đọc kỹ log: Nếu có lỗi, xem log để biết nguyên nhân
Xử lý lỗi thường gặp
Test data không load:
- Kiểm tra đường dẫn file trong zip
- Kiểm tra quyền thư mục
DMOJ_PROBLEM_DATA_ROOT
Checker không hoạt động:
- Kiểm tra cú pháp checker
- Xem log lỗi trong admin
Rejudge không chạy:
- Kiểm tra Celery đang chạy Docker:
docker compose ps celery - Xem log Celery Docker:
docker compose logs -f celery - Kiểm tra Celery bare metal:
supervisorctl status celery - Xem log Celery bare metal:
supervisorctl tail -f celery
