Giai đoạn 4 – Luyện đề

Mục tiêu giai đoạn: quen áp lực thời gian, thói quen kiểm tra bài, tối đa điểm trong phòng thi.

Trước giai đoạn này, giáo viên cần có: thể lệ năm nay (số bài, thời gian, đọc/ghi file hay bàn phím, phần mềm/IDE trong phòng thi, phiên bản Python) và đề + test các năm trước của địa phương.

Nhịp mỗi tuần (2 buổi)

Buổi A (150')Buổi B (90')
Thi thử đúng thể lệ: đúng thời gian, đúng tên file, đúng cách nộp bài20' chấm bằng cham_bai.py trước mặt HS
Giáo viên không hỗ trợ40' chữa đề: HS tự trình bày hướng giải, giáo viên bổ sung
30' luyện lại 2–3 bài cùng dạng với bài làm sai
TuầnĐề gợi ý
23Đề Tin học trẻ cấp tỉnh năm gần nhất
24Đề HSG Tin THCS cấp huyện
25Đề Tin học trẻ một tỉnh khác
26Đề tự ra (trộn các dạng HS hay sai)
27Đề Tin học trẻ cấp tỉnh năm trước nữa
28Ôn nhẹ, chữa lỗi, không thi thử 2 ngày trước kỳ thi thật

Ghi lại sau mỗi đề:

ĐềHSBài 1Bài 2Bài 3Bài 4TổngLỗi chính

Chiến thuật trong phòng thi (dạy và cho HS thực hành mỗi lần thi thử)

  1. 10 phút đầu: đọc hết tất cả các đề. Ghi giới hạn n của từng bài; xếp bài từ dễ đến khó.
  2. Làm chắc bài dễ trước. Bài 1–2 phải đạt điểm tối đa – đây là phần quyết định giải.
  3. Bài khó: lời giải "trâu" trước, tối ưu sau. Đề thường có "60% test n ≤ 1000" → code duyệt đơn giản cũng ăn được 60%.
  4. Bị kẹt 20 phút → chuyển bài khác, quay lại sau.
  5. Tự kiểm tra trước khi nộp:
    • Chạy đúng các ví dụ trong đề.
    • Thử test biên: n nhỏ nhất, giá trị bằng 0, số âm, tất cả bằng nhau.
    • Thử test lớn nhất để đo thời gian.
  6. Kiểm tra hình thức (lỗi mất điểm oan nhất):
    • Tên file đúng như đề (TONGCS.py, không phải tongcs (1).py).
    • Đọc/ghi file đúng tên TONGCS.INP / TONGCS.OUT nếu đề yêu cầu.
    • Không in thêm câu chữ như "Ket qua la:", không dùng input("Nhap n:").
    • Lưu file thường xuyên (Ctrl + S).
  7. 15 phút cuối: không viết thuật toán mới; kiểm tra lại tên file và nộp bài.

Kỹ thuật "đối chiếu" (stress test) – cho HS lớp 8 và em lớp 7 khi đã vững

Viết 2 lời giải: trau.py (chậm nhưng chắc chắn đúng) và chuan.py (nhanh). Cho máy sinh hàng trăm test nhỏ ngẫu nhiên để tìm test làm hai lời giải ra kết quả khác nhau:

# doi_chieu.py
import random, subprocess, sys

for lan in range(500):
    n = random.randint(1, 8)
    a = [random.randint(-10, 10) for _ in range(n)]
    test = f"{n}\n{' '.join(map(str, a))}\n"
    kq1 = subprocess.run([sys.executable, "trau.py"], input=test, capture_output=True, text=True).stdout
    kq2 = subprocess.run([sys.executable, "chuan.py"], input=test, capture_output=True, text=True).stdout
    if kq1.split() != kq2.split():
        print("Tìm thấy test sai:\n" + test)
        print("trau :", kq1, "chuan:", kq2)
        break
else:
    print("500 test đều khớp")

Chuẩn bị trước ngày thi

  • Luyện trên đúng phần mềm sẽ có trong phòng thi (IDE, phiên bản Python). Nếu được, xin cho HS vào thử phòng máy.
  • Ôn lại "bộ code mẫu" của chính các em: khung chương trình đi thi, sàng nguyên tố, UCLN, cộng dồn, tìm kiếm nhị phân, BFS.
  • Ngủ đủ, không học thêm kiến thức mới trong 3 ngày cuối.
  • Dặn HS: gặp bài lạ là bình thường – hãy lấy điểm từng phần bằng cách duyệt đơn giản.
Zalo