Hướng dẫn viết đề bài chuẩn cho các bài tập trên CTOJ. Một đề bài tốt phải rõ ràng, đầy đủ, và không mơ hồ — người đọc chỉ cần đọc một lần là hiểu đúng yêu cầu.
Cấu trúc đề bài
Mỗi đề bài gồm các phần theo thứ tự sau:
<Mô tả bài toán>
## Dữ liệu vào
## Dữ liệu ra
## Ràng buộc
## Ví dụ
## Ghi chú (tùy chọn)
1. Mô tả bài toán
Phần đầu mô tả bài toán cần giải. Có hai cách trình bày:
Cách 1 — Trực tiếp (toán học): Phát biểu bài toán ngắn gọn bằng ngôn ngữ toán học, không có ngữ cảnh câu chuyện.
Cho một mảng gồm phần tử nguyên. Tìm tổng lớn nhất của một dãy con liên tiếp không rỗng.
Cách 2 — Kể chuyện: Đặt bài toán trong một ngữ cảnh câu chuyện để tạo sự gần gũi. Câu chuyện phải dẫn đến yêu cầu toán học rõ ràng, không mơ hồ.
Bạn là một nhà thám hiểm đang đi tìm kho báu. Kho báu nằm ở cuối một con đường dài. Hãy tìm đường đi tốt nhất...
Nguyên tắc chung:
- Định nghĩa rõ các biến, ký hiệu trước khi dùng.
- Không đưa gợi ý giải vào phần mô tả.
2. Dữ liệu vào
Mô tả định dạng input theo từng dòng. Dùng ký hiệu toán học cho các biến.
## Dữ liệu vào
Dòng đầu tiên chứa số nguyên $n$ — số phần tử của mảng.
Dòng thứ hai chứa $n$ số nguyên $a_1, a_2, \ldots, a_n$.
Quy tắc:
- Mô tả từng dòng theo thứ tự.
- Nếu có nhiều test case, mô tả rõ số lượng và cách đọc từng test case.
- Không để người đọc phải đoán thứ tự hay định dạng.
Ví dụ nhiều test case:
Dòng đầu tiên chứa số nguyên $t$ — số lượng test case $(1 \leq t \leq 10^4)$.
Mỗi test case gồm một dòng chứa hai số nguyên $n$ và $k$.
3. Dữ liệu ra
Mô tả định dạng output tương ứng với input.
## Dữ liệu ra
In ra một số nguyên duy nhất — tổng lớn nhất tìm được.
Quy tắc:
- Nếu có nhiều test case, ghi rõ: "Với mỗi test case, in ra..."
- Nếu output không duy nhất, nêu rõ tiêu chí chấp nhận: "in ra bất kỳ đáp án hợp lệ nào."
- Nếu cần in số thực, ghi rõ độ chính xác: "In ra kết quả với sai số tuyệt đối không quá ."
4. Ràng buộc
Liệt kê tất cả ràng buộc của các biến đầu vào.
## Ràng buộc
- $1 \leq n \leq 2 \times 10^5$
- $-10^9 \leq a_i \leq 10^9$
- Tổng $n$ trên tất cả các test case không vượt quá $2 \times 10^5$.
Quy tắc:
- Mỗi ràng buộc một dòng, dùng dấu gạch đầu dòng.
- Dùng thay vì
<=. - Luôn ghi ràng buộc tổng nếu có nhiều test case.
- Thứ tự: ràng buộc tổng quát trước, ràng buộc phụ sau.
Subtask (nếu có):
## Ràng buộc
- $1 \leq t \leq 10^5$
- $1 \leq n \leq 10^5$
| Subtask | Điểm | Ràng buộc thêm |
|---------|------|----------------|
| 1 | 30 | $n \leq 100$ |
| 2 | 40 | $n \leq 5000$ |
| 3 | 30 | Không có thêm |
5. Ví dụ
Phần ví dụ dùng bảng Markdown với 3 cột: Input, Output, Giải thích.
## Ví dụ
| Input | Output | Giải thích |
|-------|--------|------------|
| 5<br>-2 1 -3 4 -1 | 4 | Dãy con $[4]$ có tổng lớn nhất là $4$. |
| 4<br>1 2 3 4 | 10 | Lấy toàn bộ mảng. |
Quy tắc:
- Ít nhất 2 ví dụ.
- Dùng
<br>để xuống dòng trong ô bảng. - Không bọc giá trị input/output trong backtick.
- Phần giải thích ngắn gọn, giải thích tại sao output đó là đúng.
- Ví dụ đầu nên là trường hợp đơn giản giúp người đọc hiểu định dạng.
- Ví dụ sau nên kiểm tra edge case hoặc trường hợp thú vị hơn.
6. Ghi chú (tùy chọn)
Dùng phần này khi cần làm rõ thêm những điều không tiện đưa vào phần trên:
- Giải thích thêm về ví dụ phức tạp.
- Lưu ý về định dạng output đặc biệt.
- Thông tin bổ sung không nằm trong ràng buộc.
## Ghi chú
Trong ví dụ 1, dãy con $[4]$ chỉ gồm một phần tử. Dãy con rỗng **không** được phép.
Ký hiệu toán học (TeX)
Dùng cú pháp TeX với $...$ cho math inline:
| Cần viết | Cú pháp |
|---|---|
$n \leq 10^5$ |
|
$a_1, a_2, \ldots, a_n$ |
|
$\lfloor n/2 \rfloor$ |
|
$\sum_{i=1}^{n} a_i$ |
|
$2 \times 10^5$ |
|
$a \bmod m$ |
|
$\gcd(a, b)$ |
Checklist trước khi nộp đề
- [ ] Bài toán được phát biểu rõ ràng, không mơ hồ.
- [ ] Tất cả biến được định nghĩa trước khi sử dụng.
- [ ] Định dạng input/output khớp với các ví dụ.
- [ ] Ràng buộc đầy đủ cho tất cả biến.
- [ ] Có ít nhất 2 ví dụ với giải thích.
- [ ] Không có gợi ý giải thuật trong đề bài.
- [ ] Math dùng TeX (
$...$), không dùng plain text. - [ ] Không có lỗi chính tả tiếng Việt.
Mẫu đề bài hoàn chỉnh
Hiếu rất yêu thích số nguyên tố, đồng thời cũng rất yêu thích số $5$. Hiếu luôn coi các số nguyên tố có tổng các chữ số chia hết cho $5$ là **số đặc biệt**. Lần này, thầy giáo đưa cho Hiếu $2$ số nguyên dương $L$, $R$ ($L \leq R$). Hiếu muốn biết trong đoạn $[L, R]$ có bao nhiêu số đặc biệt nên nhờ các bạn trả lời giúp.
## Dữ liệu vào
- Dòng đầu tiên chứa số nguyên dương $T$ ($1 \leq T \leq 100$) là số lượng test.
- $T$ dòng tiếp theo, mỗi dòng chứa hai số nguyên dương $L$, $R$ ($0 < L \leq R \leq 3 \cdot 10^6$) theo thứ tự, phân tách nhau bởi dấu cách.
## Dữ liệu ra
Gồm $T$ dòng, mỗi dòng ghi một số là số lượng số đặc biệt trong đoạn $[L, R]$, tương ứng theo thứ tự trong file input. Dòng thứ $i$ trong file output là kết quả của cặp số $[L, R]$ ở dòng $i+1$ trong file input.
## Ràng buộc
- $1 \leq T \leq 100$
- $0 < L \leq R \leq 3 \cdot 10^6$
## Ví dụ
| Input | Output | Giải thích |
|-------|--------|------------|
| 2<br>1 10<br>4 20 | 1<br>2 | Trong đoạn $[1, 10]$ có $1$ số đặc biệt là $5$.<br>Trong đoạn $[4, 20]$ có $2$ số đặc biệt là $5$ và $19$ ($1+9=10$). |
Xem bài gốc: SPRIME
Xem thêm
- Hướng dẫn Markdown — cú pháp Markdown đầy đủ dùng trên CTOJ.
- MathJax TeX Commands — danh sách đầy đủ các lệnh TeX.
Bình luận