Đọc đề bài cẩn thận là kỹ năng quan trọng nhất trong lập trình thi đấu. Nhiều lỗi sai không đến từ code mà đến từ việc hiểu sai yêu cầu.
Cấu trúc một đề bài
1. Mô tả bài toán
Phần này mô tả bối cảnh và yêu cầu. Hãy đọc kỹ để hiểu bài toán thực sự yêu cầu gì, không phải câu chuyện bao quanh nó.
2. Đầu vào (Input)
Mô tả chính xác định dạng dữ liệu nhận vào:
- Dòng đầu tiên chứa gì?
- Các dòng tiếp theo có bao nhiêu số?
- Có bao nhiêu test case?
3. Đầu ra (Output)
Mô tả chính xác định dạng kết quả cần in:
- In số hay chuỗi?
- Mỗi kết quả trên một dòng?
- Có khoảng trắng thừa ở cuối không?
4. Ràng buộc (Constraints)
Đây là phần quan trọng nhất để chọn thuật toán:
- → được
- → cần hoặc
- → cần hoặc
5. Ví dụ (Sample)
Dùng ví dụ để kiểm tra hiểu đúng đề chưa. Hãy tự chạy tay trước khi code.
Quy trình đọc đề hiệu quả
- Đọc lướt toàn bộ đề một lần.
- Xác định: Input là gì? Output là gì?
- Đọc kỹ ràng buộc.
- Thử chạy tay ví dụ mẫu.
- Nghĩ các trường hợp đặc biệt (edge cases).
Các lỗi thường gặp
- Đọc sai ràng buộc: Nhầm thành .
- Bỏ qua định dạng output: Đề yêu cầu in
YES/NOnhưng inYes/No. - Không đọc kỹ số test case: Đề có nhiều test case nhưng chỉ giải một.
- Nhầm 0-indexed và 1-indexed: Đỉnh đồ thị bắt đầu từ 0 hay 1?
Ví dụ phân tích đề
Bài toán: Cho mảng số nguyên, tìm tổng lớn nhất của một dãy con liên tiếp. Ràng buộc: ,
Phân tích:
- Input: số nguyên , sau đó số nguyên.
- Output: một số nguyên (tổng lớn nhất).
- Ràng buộc → cần thuật toán hoặc .
- Giá trị âm → cần xử lý trường hợp tất cả phần tử đều âm.
Bình luận