Wiki Bắt đầu Đọc hiểu đề bài

Đọc hiểu đề bài

huunguyen huunguyen Updated Tháng tư 3, 2026

Đọ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:

  • N103O(N2) được
  • N105 → cần O(NlogN) hoặc O(N)
  • N109 → cần O(logN) hoặc O(1)
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ả

  1. Đọc lướt toàn bộ đề một lần.
  2. Xác định: Input là gì? Output là gì?
  3. Đọc kỹ ràng buộc.
  4. Thử chạy tay ví dụ mẫu.
  5. 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 N105 thành N103.
  • Bỏ qua định dạng output: Đề yêu cầu in YES/NO nhưng in Yes/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 N 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: 1N105, 109ai109

Phân tích:

  • Input: số nguyên N, sau đó N số nguyên.
  • Output: một số nguyên (tổng lớn nhất).
  • Ràng buộc N105 → cần thuật toán O(N) hoặc O(NlogN).
  • Giá trị âm → cần xử lý trường hợp tất cả phần tử đều âm.
gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0