Lộ trình học thuật toán từ A đến Z
Bạn mới bắt đầu và không biết nên đọc bài nào trước? Mình đã sắp xếp toàn bộ lời giải trên web thành 9 chặng từ dễ đến khó, đúng theo thứ tự mình vẫn dạy học viên ôn thi vào lớp 10 chuyên Tin, thi HSG cấp tỉnh và đội tuyển. Mỗi bài có ý tưởng, code C++/Python và khung chấm thử ngay dưới bài.
Cách dùng lộ trình này
Đọc đề, tự nghĩ và tự code ít nhất 20–30 phút rồi mới xem lời giải. Bí quá thì chỉ đọc phần ý tưởng thôi.
Dán code vào khung Chấm thử ở cuối mỗi bài để chạy với test ví dụ. Học viên của lớp thì nộp lên CLUE OJ để chấm với bộ test đầy đủ.
Bấm vào ô tròn trước mỗi bài, hoặc nút Đánh dấu đã giải trong bài, để theo dõi tiến độ. Trang chủ cũng hiện tiến độ của bạn.
Chặng 1. Nhập môn & kỹ năng cơ bản
Đây là phần móng. Bạn tập đọc đề cho kỹ, nhập xuất dữ liệu nhanh, duyệt mảng, vét cạn có kiểm soát và luôn tự hỏi: code mình chạy bao nhiêu phép tính? Phần lớn lỗi sai của học sinh mới đến từ tràn số (quên long long) và vòng lặp chạy quá lâu.
- Ước lượng độ phức tạp trước khi code: khoảng 108 phép tính mỗi giây.
- Thấy số lớn hơn 2·109 thì dùng ngay
long long. - Viết vét cạn trước, rồi mới tối ưu.
0/17
- Bầu cua tôm cáDễ
- Cột bòDễ
- Đồng hồ báo thứcDễ
- Tính giá trịDễ
- Tưới Nước Cho RauDễ
- Đếm số bộ 3Dễ
- Hoán ĐổiDễ
- Đảo NgượcDễ
- Tổng đoạn con lớn nhấtDễ
- Gameshow "Ai là triệu phú"Dễ
- Chia Quà 4Dễ
- Đếm Chữ SốDễ
- Sửa ĐènDễ
- Tính Tổng Các Số Trong XâuDễ
- Ăn Bánh (cookies)Dễ
- Tích Lớn Nhất (TICHMAX)Dễ
- Cách hạn chế lỗi Wrong Answer khi nộp bài trên các web chấm code
Chặng 2. Toán & số học
Đề thi HSG rất hay có bài toán học: chia hết, ước, số nguyên tố, đồng dư, tìm quy luật. Chỉ cần nhận xét đúng là code rất ngắn, nhưng nếu không nhìn ra thì có code dài cũng không qua được.
- Thuộc lòng sàng Eratosthenes và cách đếm ước.
- Kết quả lớn thì lấy modulo ở mọi bước cộng và nhân.
- Thử tay với N nhỏ để tìm quy luật, sau đó mới chứng minh.
0/7
- Tìm 2 sốDễ
- Khuyến Mãi (mua bút)Dễ
- LoopTrung bình
- Trám ĐenTrung bình
- Đếm Cặp Version 2Trung bình
- Phân SốTrung bình
- Tìm Chữ Số (CHUSO2)Trung bình
Chặng 3. Xử lý chuỗi
Xâu ký tự xuất hiện trong gần như mọi đề thi: đếm ký tự, xâu con, đối xứng, so khớp. Bạn nắm chắc thao tác cơ bản trước rồi mới học KMP và Hash.
- Dùng mảng đếm 26 chữ cái thay cho map khi có thể.
- Để ý chỉ số bắt đầu từ 0 hay 1, sai một vị trí là WA.
- Đọc cả dòng có dấu cách thì dùng
getline.
0/3
- Mã hóa CeasarDễ
- Biến đổi xâu đối xứngTrung bình
- Xâu Con (HSG12'18-19)Trung bình
Chặng 4. Sắp xếp, mảng cộng dồn, hai con trỏ
Đây là nhóm kỹ thuật "rẻ mà mạnh": sắp xếp, mảng cộng dồn (prefix sum), mảng hiệu, hai con trỏ, rời rạc hoá. Nhiều bài O(N²) xuống được O(N) hoặc O(N log N) chỉ nhờ một mảng cộng dồn.
- Gặp câu hỏi tổng đoạn [l, r] thì nghĩ ngay tới prefix sum.
- Có nhiều lần cộng vào một đoạn thì dùng mảng hiệu.
- Mảng đã sắp xếp mà cần tìm cặp thì thử hai con trỏ.
0/10
- Chọn từTrung bình
- Ma trận xoắn ốc 2Trung bình
- Số Lượng Cách XóaTrung bình
- Trung Bình CộngTrung bình
- Ước Lớn Nhất (BESTUOC)Trung bình
- Dấu trong đoạn (MULTI)Trung bình
- Đoạn Đẹp (Duyên Hải 2021)Trung bình
- Điểm chungKhá
- Hộp màu (COLORBOXKhá
- Hình Chữ Nhật 2Khó
Chặng 5. Tham lam & tìm kiếm nhị phân
Tham lam là chọn cái tốt nhất ở mỗi bước. Khó nhất là chứng minh cách chọn đó đúng. Tìm kiếm nhị phân không chỉ để tìm phần tử trong mảng, mà còn để chặt nhị phân đáp án, một kỹ thuật cực kỳ hay gặp.
- Nghĩ ra cách tham lam thì thử tìm phản ví dụ trước khi code.
- Đề hỏi "nhỏ nhất sao cho…" hay "lớn nhất sao cho…" thì nghĩ tới chặt nhị phân đáp án.
- Viết hàm
check(x)riêng cho gọn và dễ sửa.
0/22
- Thang máyDễ
- Đồng hồ sốDễ
- Cửa Hàng Số HọcDễ
- Sách CũDễ
- Dự Trữ NướcDễ
- Tiệm SáchDễ
- Chênh lệchTrung bình
- Bán BitcoinTrung bình
- Ghép SốTrung bình
- Tổng Lớn Nhất Đạt Được Từ Một Hoán Vị Bất KỳTrung bình
- Thêm Dãy ConTrung bình
- Chặt Cây Xây NhàTrung bình
- Đoạn Phủ (DOANP)Trung bình
- Nối Điểm Đen Trắng (VOI 2011)Trung bình
- Bảng NhânTrung bình
- Khuyến mãi trà sữaTrung bình
- Chiều dài phủ (DOANP2)Trung bình
- Khoảng cách nhỏ nhất (RBPOINT2)Trung bình
- Cặp Ước ĐẹpKhá
- Chia Mảng (CSES Array Division)Khá
- Xây Hàng Rào (HNOJ)Khá
- Khóa Số 3Khó
Chặng 6. Đệ quy, quay lui, chia để trị
Đệ quy là nền tảng cho quay lui, chia để trị, duyệt bitmask và meet in the middle. Đây cũng là cầu nối để bước sang quy hoạch động.
- Luôn viết điều kiện dừng trước.
- Quay lui thì nhớ cắt nhánh sớm để chạy kịp thời gian.
- N ≤ 20 thì nghĩ tới bitmask, N ≤ 40 thì nghĩ tới meet in the middle.
Chặng 7. Quy hoạch động
Quy hoạch động là "trùm cuối" của các kỳ thi HSG và chuyên Tin. Bạn cần trả lời được 3 câu: trạng thái là gì, chuyển trạng thái thế nào, và cơ sở (trường hợp nhỏ nhất) là gì.
- Bắt đầu từ các bài kinh điển: cái túi, dãy con tăng, đếm cách.
- Viết công thức truy hồi ra giấy trước khi code.
- Gặp đếm số trong đoạn [A, B] theo chữ số thì dùng Digit DP.
0/20
- Tìm xnTrung bình
- Tổng Bình Phương Các Số ConTrung bình
- Chia TrangTrung bình
- Cộng một kiểu ĐứcTrung bình
- Dãy Số 8Trung bình
- Giảm Thiểu Đồng Xu (CSES 1634)Trung bình
- Lát GạchTrung bình
- Mario Nhảy CộtTrung bình
- Mô Tả Mảng (CSES 1746 Array Description)Trung bình
- Dự ánKhá
- Qua cầuKhá
- Chú Tiểu Chùa HươngKhá
- Số Zero Tận CùngKhá
- Trọng Số Của XâuKhá
- Tổng Các Chữ SốKhó
- Chi Phí Ít Nhất Để Kết Nối Hai Nhóm ĐiểmKhó
- Đếm Xâu TốtKhó
- Số Cách Điền LướiKhó
- Trò Chơi Nhặt TiềnKhó
- HỎI ĐÁP LẬP TRÌNH THI HỌC SINH GIỎI
Chặng 8. Đồ thị
Phần dành cho mục tiêu đội tuyển và chuyên Tin cấp cao: duyệt đồ thị BFS/DFS, đường đi ngắn nhất, cây khung, DSU, cây và LCA. Rất nhiều bài nhìn qua tưởng không liên quan, nhưng khi mô hình hoá thành đồ thị là ra ngay.
- Lưu đồ thị bằng danh sách kề (
vector<int> adj[N]). - Đồ thị không trọng số thì BFS, có trọng số không âm thì Dijkstra.
- Cần gộp nhóm hoặc kiểm tra liên thông nhanh thì dùng DSU.
0/3
- Nhà Từ Thiện SwyrinTrung bình
- Bin LadenKhá
- Dịch chuyển tức thờiKhó
Chặng 9. Cấu trúc dữ liệu & kỹ thuật nâng cao
Các cấu trúc dữ liệu giúp code nhanh hơn hẳn: ngăn xếp, hàng đợi, hàng đợi ưu tiên, set/map, ngăn xếp đơn điệu, rồi tới Segment Tree, Fenwick Tree, Sparse Table. Đây là những "vũ khí" để lấy trọn điểm các bài khó nhất.
- Tìm phần tử gần nhất lớn hơn hoặc nhỏ hơn thì dùng ngăn xếp đơn điệu.
- Truy vấn đoạn có cập nhật thì dùng Segment Tree hoặc Fenwick.
- Luôn ghi nhớ độ phức tạp của từng thao tác trên set/map/priority_queue.
0/13
- Mật Khẩu (PASSWDễ
- Nhảy Lò CòTrung bình
- Số Nguyên Tố Hoàn HảoTrung bình
- Đồng Tiền Xu Giả (FCOIN)Trung bình
- Số siêu nguyên tố (SPRIME)Trung bình
- Xóa Chữ Số (DELNUM)Trung bình
- Chia RuộngKhá
- Đếm Đoạn Bao ChứaKhá
- SEQKhá
- Palindrome KépKhó
- Ăn BuffetKhó
- Chênh Lệch Lớn NhấtKhó
- Hội ChợKhó
Bài tổng hợp và luyện thêm
Những bài kết hợp nhiều kỹ thuật, hoặc chưa xếp vào chặng nào ở trên. Bạn dùng phần này để luyện phản xạ như khi đi thi thật.
Các bài của chặng này đang được mình soạn, bạn quay lại sau nhé.
Học nhanh hơn với người kèm
Tự học theo lộ trình này là hoàn toàn được. Nhưng nếu bạn cần người chữa bài, chỉ ra lỗi sai và lên kế hoạch ôn thi sát với đề của tỉnh mình, mình luôn sẵn sàng đồng hành.
Nếu thấy lộ trình hữu ích, bạn để lại một lời bình luận hoặc chia sẻ cho bạn bè cùng học nhé. Đó là động lực rất lớn để mình viết thêm nhiều bài nữa! 💪
Nhận xét
Đăng nhận xét