- Trong phòng thi không có AI. Mọi thứ AI làm hộ trong lúc ôn là kỹ năng bạn không luyện được.
- Dùng AI như gia sư: tự làm trước, khi bí thì xin gợi ý từng bước, không xin code hoàn chỉnh.
- Lời giải AI đưa ra có thể trông đúng mà sai ở trường hợp biên. Đối chiếu với lời giải trâu trên test ngẫu nhiên nhỏ là cách bắt lỗi nhanh nhất.
- Trong các kỳ thi trực tuyến, dùng AI thường bị cấm. Ví dụ, quy định của USACO cấm dùng AI tạo sinh như Copilot hay ChatGPT trong lúc thi.
Bài này dành cho học sinh ôn thi học sinh giỏi Tin học và các kỳ thi lập trình. Bài tập luyện lấy từ các trang chấm tự động công khai như VNOJ, CSES, và tài liệu USACO Guide; quy định về AI trong thi trực tuyến lấy từ trang quy định của USACO (đọc ngày 11/11/2026).
Vì sao không nên xin AI giải hộ
Mô hình ngôn ngữ hiện nay giải được nhiều bài thuật toán ở mức phổ thông. Điều đó dễ tạo cảm giác ôn nhanh: đọc đề, dán vào, đọc lời giải, gật gù, sang bài khác. Sau một tháng, bạn đã "xem" hàng trăm lời giải nhưng không tự giải được bài nào mới, vì kỹ năng thi là tự tìm ra ý tưởng trong thời gian giới hạn, không phải hiểu ý tưởng người khác đưa sẵn.
Có một lý do nữa: lời giải AI không phải lúc nào cũng đúng. Nó có thể chọn sai thuật toán cho giới hạn dữ liệu, quên trường hợp biên, hoặc tràn số. Nếu bạn không tự hiểu bài, bạn không biết lời giải sai ở đâu.
Trong kỳ thi chính thức, bạn làm bài một mình. Với các kỳ thi trực tuyến, quy định cũng rõ: trang quy định của USACO cấm dùng AI tạo sinh trong lúc thi, chỉ cho tra tài liệu về cú pháp ngôn ngữ và thư viện, cấm dùng code viết sẵn, và người vi phạm bị cấm tham gia vĩnh viễn. Các trang thi khác cũng có luật riêng, cần đọc trước mỗi kỳ.
Vòng ôn một bài
Bước 1: tự làm trước. Đọc đề, xác định giới hạn dữ liệu, ước lượng độ phức tạp cần có. Ghi ra giấy mọi ý tưởng, kể cả ý tưởng chậm. Nếu sau khoảng 30 phút đến một giờ không có hướng đi, mới chuyển sang bước 2. Thời gian bí là thời gian luyện; bỏ qua nó là bỏ qua phần quan trọng nhất.
Bước 2: xin gợi ý từng bước. Viết rõ yêu cầu: "Đừng đưa lời giải hay code. Hãy cho tôi một gợi ý nhỏ về hướng suy nghĩ; tôi sẽ hỏi gợi ý tiếp theo nếu cần." Kể cho AI những gì bạn đã thử và vì sao thấy không được. Gợi ý đầu thường là câu hỏi kiểu "nếu biết đáp án cho tiền tố, có tính được cho phần tử tiếp theo không?". Nhận một gợi ý, quay lại tự nghĩ.
Bước 3: tự viết code và nộp. Code do bạn gõ, không dán từ AI. Nộp lên trang chấm tự động như VNOJ hoặc CSES. Nếu bị sai, đọc kết quả chấm, tự tìm lỗi trước. Chỉ khi tìm mãi không ra mới hỏi AI, và hỏi kiểu "đoạn code này sai với loại test nào?" thay vì "sửa giúp tôi".
Bước 4: đối chiếu với lời giải trâu. Đây là kỹ thuật nên dùng cho mọi bài, có AI hay không, và là phần dưới đây.
Bắt lỗi bằng lời giải trâu
Lời giải trâu là lời giải vét cạn, chậm nhưng chắc chắn đúng với dữ liệu nhỏ. Bạn sinh ngẫu nhiên nhiều bộ dữ liệu nhỏ, chạy cả lời giải nhanh và lời giải trâu, so kết quả. Khi hai bên khác nhau, bạn có ngay một test nhỏ làm lời giải nhanh sai, dễ dò hơn nhiều so với đọc code.
Đoạn Python dưới đây làm điều đó với bài tổng đoạn con liên tiếp lớn nhất (dãy có thể có số âm, đoạn phải khác rỗng). Hàm ban_nhap là lời giải tuyến tính kiểu hay gặp khi xin AI viết vội: khởi tạo tổng bằng 0. Hàm kadane là bản đã sửa, khởi tạo bằng phần tử đầu tiên.
"""Đối chiếu lời giải nhanh với lời giải trâu (vét cạn) trên test ngẫu nhiên nhỏ.
Bài: cho dãy số nguyên a (có thể âm), tìm tổng lớn nhất của một đoạn con liên tiếp khác rỗng.
- trau: thử mọi đoạn, O(n^2) đoạn, chắc chắn đúng, dùng làm chuẩn.
- ban_nhap: lời giải O(n) kiểu "AI gợi ý", trông đúng nhưng khởi tạo bằng 0.
- kadane: lời giải O(n) đã sửa.
"""
import random
def trau(a):
return max(sum(a[i:j + 1]) for i in range(len(a)) for j in range(i, len(a)))
def ban_nhap(a):
tot = cur = 0
for x in a:
cur = max(0, cur + x)
tot = max(tot, cur)
return tot
def kadane(a):
tot = cur = a[0]
for x in a[1:]:
cur = max(x, cur + x)
tot = max(tot, cur)
return tot
def doi_chieu(ham, so_lan=1000, n_max=6, bien=5, seed=2026):
rng = random.Random(seed)
for lan in range(1, so_lan + 1):
a = [rng.randint(-bien, bien) for _ in range(rng.randint(1, n_max))]
if ham(a) != trau(a):
return lan, a, trau(a), ham(a)
return None
def chay_thu():
dong = []
for ten, ham in [("ban_nhap", ban_nhap), ("kadane", kadane)]:
kq = doi_chieu(ham)
if kq is None:
dong.append(f"{ten}: khớp lời giải trâu trên 1000 test")
else:
lan, a, dung, sai = kq
dong.append(f"{ten}: sai ở test thứ {lan}, a = {a}, đúng {dung}, ra {sai}")
print("\n".join(dong))
return dong
if __name__ == "__main__":
chay_thu()
Kết quả: bản nháp sai ngay ở test thứ 5, với dãy chỉ có một phần tử là -1; đáp án đúng là -1 nhưng bản nháp trả về 0, vì nó ngầm cho phép chọn đoạn rỗng. Bản đã sửa khớp lời giải trâu trên cả 1000 test. Lỗi kiểu này rất khó thấy khi đọc lời giải trông gọn gàng, nhưng lộ ra ngay khi đối chiếu.
Ba lưu ý khi dùng kỹ thuật này. Test phải nhỏ để lời giải trâu chạy nhanh và để bạn dò tay được. Nên sinh cả giá trị âm, bằng 0, và độ dài 1, vì lỗi hay nằm ở biên. Khi tìm được test sai, tự sửa trước khi hỏi AI.
Những cách dùng AI có ích khác
Giải thích một kỹ thuật bạn chưa biết. Ví dụ bạn đọc lời giải chính thức có dùng cây phân đoạn và chưa hiểu cập nhật lười. Hỏi AI giải thích với một ví dụ nhỏ, rồi tự cài lại từ đầu và nộp một bài cơ bản về kỹ thuật đó. Danh sách bài theo chủ đề có trong USACO Guide và CSES.
Phân tích độ phức tạp. Đưa code của bạn và giới hạn dữ liệu, hỏi độ phức tạp và liệu có qua được thời gian không. Sau đó tự tính lại để kiểm tra.
Đọc lại lời giải sau khi đã giải được. Khi đã có lời giải được chấp nhận, hỏi AI có cách nào gọn hơn. So sánh hai cách giúp bạn học thêm mẫu tư duy mới mà không mất cơ hội tự giải.
Lập kế hoạch ôn. Liệt kê các chủ đề, số bài đã làm mỗi chủ đề, và nhờ AI gợi ý thứ tự ôn. Kế hoạch cuối cùng nên do bạn và thầy cô quyết định.
Thi thử không có AI
Mỗi tuần nên có ít nhất một buổi thi thử đúng điều kiện phòng thi: chọn ba hoặc bốn bài chưa làm, bấm giờ đúng thời lượng của kỳ thi thật, tắt mạng và mọi công cụ gợi ý code, chỉ mở tài liệu ngôn ngữ nếu quy chế cho phép. Sau buổi thi mới được xem lời giải và hỏi AI.
Buổi thi thử cho bạn con số trung thực về trình độ hiện tại: giải được bao nhiêu bài, mất bao lâu cho mỗi bài, bao nhiêu lần nộp sai. Nếu điểm thi thử thấp hơn nhiều so với cảm giác lúc ôn có AI, đó là dấu hiệu bạn đang dựa vào gợi ý quá sớm. Khi đó, kéo dài thời gian tự làm ở bước 1 và giảm số gợi ý mỗi bài.
Ghi sổ lỗi
Sau mỗi bài sai, ghi một dòng: bài nào, sai vì sao (hiểu sai đề, sai thuật toán, quên biên, tràn số, chạy quá thời gian), và cách bạn tìm ra. Sau vài tuần, sổ này cho thấy bạn hay sai loại gì, và đó là thứ cần ôn nhất. AI có thể giúp phân loại lỗi, nhưng việc ghi phải do bạn làm, vì chính việc ghi giúp nhớ.
Với học sinh quan tâm đến kỳ thi về trí tuệ nhân tạo, kỹ năng lập trình và tư duy thuật toán ở đây cũng là nền tảng. Thông tin về kỳ thi đó có trong bài Olympic AI IOAI.
- Dán đề vào AI ngay khi đọc xong, không tự nghĩ trước.
- Dán code AI viết lên trang chấm để lấy kết quả chấp nhận.
- Tin lời giải AI mà không đối chiếu với lời giải trâu.
- Dùng AI trong kỳ thi trực tuyến có luật cấm.
- Chỉ đọc lời giải, không tự cài lại kỹ thuật mới.
Câu hỏi thường gặp
Bao lâu thì nên xin gợi ý?
Tùy độ khó, thường sau 30 phút đến một giờ không có hướng mới. Bài dễ hơn trình độ của bạn thì không xin.
Có nên dùng trợ lý gợi ý code trong trình soạn thảo khi luyện không?
Nên tắt khi luyện thi. Nó gõ hộ bạn những đoạn code mà trong phòng thi bạn phải tự gõ nhanh và đúng.
AI giải sai thì làm sao biết?
Đối chiếu với lời giải trâu trên test ngẫu nhiên nhỏ, và nộp lên trang chấm. Kết quả chấm là căn cứ cuối cùng.
Học Python hay C++ để thi?
Tùy quy định ngôn ngữ của kỳ thi và giới hạn thời gian của đề. Nhiều bạn dùng C++ khi thi, nhưng Python vẫn rất tiện để viết lời giải trâu và sinh test.
Học tiếp
- Thông tin kỳ thi quốc tế về AI: Olympic AI IOAI.
- Ôn Python cho các bài xử lý dữ liệu: Python cho AI.
- Tài liệu học thêm: tài liệu học AI.
Nếu bạn muốn học Python và AI bài bản cùng giảng viên, tham khảo khóa học AI của Big-O Coding.
Khóa AI – Introduction to Machine Learning: nền tảng Máy học từ thuật toán cơ bản đến Neural Networks và LLM, học bằng Python. Học thử buổi 1 miễn phí.


