Lập trình thi đấu
Đề thi học sinh giỏi Tin học hay tuyển sinh chuyên Tin thường có giới hạn kiểu n ≤ 105 hoặc n ≤ 106. Với giới hạn đó, cách thử hết mọi khả năng thường cần tới 1010 phép tính trở lên, chỉ lấy được điểm các test nhỏ. Lập trình thi đấu là các kỹ thuật giúp đưa số phép tính xuống còn khoảng 106 đến 108, đủ để chương trình chạy kịp giới hạn của đề.
Mỗi bài trong mục này gồm:
- Lý thuyết giải thích vì sao kỹ thuật đúng và vì sao nó nhanh, kèm bảng chạy tay.
- Chương trình Python và C++ cho từng ý quan trọng.
- Bài luyện tập có đáp số để tự kiểm tra (miễn phí). Lời giải chi tiết các bài luyện tập có trong bộ tài liệu có phí.
Dành cho ai?
Phần tiêu đề “Dành cho ai?”- Học sinh THCS, THPT ôn thi học sinh giỏi Tin học và tuyển sinh chuyên Tin lớp 10.
- Học sinh thi Tin học trẻ Bảng B, C (lập trình Python, C++).
- Thầy cô dạy đội tuyển cần một lộ trình có bài luyện tập theo từng kỹ thuật.
Mục này dành cho các bạn đã viết được chương trình có vòng lặp, mảng, hàm. Kiến thức nền (độ phức tạp, sắp xếp, tìm kiếm nhị phân, ngăn xếp, hàng đợi, BFS, DFS…) có ở mục CTDL & Giải thuật. Phần toán (số học, tổ hợp, hình học tọa độ, lý thuyết trò chơi…) có ở mục Toán tin.
Mức độ
Phần tiêu đề “Mức độ”Mỗi bài có icon mức độ trong mục lục và ở đầu bài:
Cơ bản
Phần tiêu đề “ Cơ bản”Kỹ thuật dùng nhiều trong đề học sinh giỏi cấp huyện, cấp tỉnh. Các bạn nên bắt đầu từ đây.
Nâng cao
Phần tiêu đề “ Nâng cao”Kiến thức cho thi học sinh giỏi cấp tỉnh, tuyển sinh chuyên Tin lớp 10.
Chuyên sâu
Phần tiêu đề “ Chuyên sâu”Kiến thức cho thi học sinh giỏi quốc gia, lập trình thi đấu (ICPC).
Ước lượng thời gian chạy
Phần tiêu đề “Ước lượng thời gian chạy”Các bài trong mục này so sánh hai cách làm bằng số phép tính, không bằng thời gian: thời gian chạy thật phụ thuộc rất nhiều vào máy, ngôn ngữ, trình biên dịch và cách viết code.
Để biết cách làm nào hợp với giới hạn của đề, các bạn thay n lớn nhất vào số bước. Ví dụ n = 105: thử mọi cặp mất khoảng 5 × 109 bước, còn kỹ thuật hai con trỏ chỉ mất khoảng 2 × 105 bước, ít hơn khoảng 25 000 lần.
Lộ trình
Phần tiêu đề “Lộ trình”Các bạn học lần lượt từ trên xuống. Mỗi bài có lý thuyết, chương trình Python và C++, và từ 10 đến 28 bài luyện tập (trừ hai bài kỹ năng thi).
Nền tảng
Phần tiêu đề “Nền tảng”Các bài này có ở mục CTDL & Giải thuật, nên đọc trước khi vào phần kỹ thuật.
| Bài | Ở đâu |
|---|---|
| Độ phức tạp thuật toán | CTDL & Giải thuật |
| Đệ quy, quay lui | CTDL & Giải thuật |
| Sắp xếp, tìm kiếm nhị phân | CTDL & Giải thuật |
| Thuật toán tham lam | CTDL & Giải thuật |
| Ngăn xếp, hàng đợi, heap | CTDL & Giải thuật |
| Tổng tiền tố và mảng hiệu | Toán tin |
Kỹ thuật cơ bản
Phần tiêu đề “Kỹ thuật cơ bản”| Bài | Mức độ |
|---|---|
| Hai con trỏ và cửa sổ trượt | |
| Mảng đánh dấu và đếm tần suất | |
| Rời rạc hóa (nén số) | |
| Tìm kiếm nhị phân theo đáp án | |
| Meet in the middle | |
| Tìm kiếm tam phân | |
| Tham lam trong thi đấu |
Cấu trúc dữ liệu
Phần tiêu đề “Cấu trúc dữ liệu”| Bài | Mức độ |
|---|---|
| Ngăn xếp đơn điệu, hàng đợi đơn điệu | |
| Bảng thưa (Sparse Table) | |
| Disjoint Set Union (DSU) | |
| Cây Fenwick (BIT) | |
| Cây phân đoạn (Segment Tree) |
Quy hoạch động
Phần tiêu đề “Quy hoạch động”Đồ thị
Phần tiêu đề “Đồ thị”Xử lý xâu
Phần tiêu đề “Xử lý xâu”| Bài | Mức độ |
|---|---|
| Hash xâu | |
| KMP và Z-function | |
| Cây tiền tố (Trie) |
Kỹ năng thi
Phần tiêu đề “Kỹ năng thi”| Bài | Mức độ |
|---|---|
| Đọc giới hạn của đề để chọn thuật toán | |
| Sinh test và stress test |
Toán trong lập trình thi đấu
Phần tiêu đề “Toán trong lập trình thi đấu”Số học (số nguyên tố, sàng, ƯCLN, modulo, lũy thừa nhanh, nghịch đảo modulo, định lý số dư Trung Hoa), tổ hợp, nguyên lý bù trừ, hình học tọa độ, lý thuyết trò chơi, xác suất có ở mục Toán tin.