1.1
Biến, kiểu dữ liệu và nhập xuất
Hiểu cách khai báo biến, nhập và xuất dữ liệu trong C++ và Python.
1.2
Cấu trúc điều kiện (if / else)
Phân nhánh quyết định trong chương trình – nền tảng cho mọi thuật toán phức tạp.
1.3
Vòng lặp for / while
Tự động hoá thao tác lặp, xử lý dãy số, tính tổng, đếm, kiểm tra điều kiện lặp.
1.4
STL cơ bản: vector, pair, tuple
1.5
Iterator, range-based for
2.1
Mảng 1D và 2D
Hiểu cách khai báo, truy cập và duyệt mảng trong C++ và Python; làm việc với ma trận và tính toán cơ bản.
2.2
Chuỗi ký tự
Làm việc với string: nhập chuỗi có dấu cách, nối chuỗi, đếm ký tự, đảo ngược chuỗi, và so sánh C++ – Python.
2.3
Hàm và truyền tham trị / tham chiếu
Học cách chia nhỏ chương trình thành hàm; hiểu truyền tham trị và tham chiếu; viết hàm kiểm tra, tính toán.
2.4
Đọc và ghi file
Làm quen với file I/O để xử lý dữ liệu thực tế, đọc dữ liệu từ file .INP và ghi kết quả ra file .OUT – giống bài thi HS…
2.5
Stack
Cấu trúc ngăn xếp.
2.6
Queue
Cấu trúc hàng đợi.
2.7
Deque
Cấu trúc hàng đợi hai đầu.
2.8
Linked List
Lưu trữ dữ liệu linh hoạt, cho phép chèn và xóa nhanh hơn mảng.
2.9
Hash Table & Priority Queue
Truy cập dữ liệu siêu nhanh bằng Hash Map và cấu trúc Heap.
2.10
STL algorithm: sort, lower_bound, upper_bound
2.11
set, multiset, map, unordered_map
3.1
Tìm kiếm tuyến tính & nhị phân
Hiểu cách tìm kiếm phần tử trong mảng bằng Linear Search và Binary Search.
3.2
Các thuật toán sắp xếp cơ bản
Cài đặt Selection Sort, Insertion Sort, Bubble Sort và hiểu độ phức tạp.
3.3
Độ phức tạp thuật toán
Phân biệt O(1), O(n), O(n log n), O(n²) và học cách chọn thuật toán tối ưu.
3.4
Amortized analysis
3.5
Counting sort, radix sort, heap sort
4.1
Bài toán đếm & tính toán
Sử dụng vòng lặp, điều kiện để tính tổng, đếm số lượng, tìm giá trị lớn nhất, nhỏ nhất.
4.2
Thống kê & tìm kiếm dữ liệu
Làm quen với bài toán phân tích dữ liệu – đếm tần suất, tìm phần tử xuất hiện nhiều nhất.
4.3
Xử lý dãy số & chuỗi dữ liệu
Thao tác với dãy số – đảo ngược, xoay, tìm mẫu, phát hiện quy luật.
4.4
Bài toán mô phỏng thực tế
Viết chương trình mô phỏng tình huống thực: điểm danh, bán hàng, quản lý dữ liệu đơn giản.
4.5
Prefix sum
4.6
Prefix Max
4.7
Difference array
4.8
Two pointers
4.9
Sliding window
5.1
Đệ quy và cây tìm kiếm
Nắm vững lời gọi đệ quy, trạng thái, trường hợp cơ sở và cách phân tích cây tìm kiếm.
5.2
Sinh cấu hình và Bitmask Enumeration
Sinh tập con, tổ hợp, hoán vị và duyệt trạng thái hiệu quả bằng bitmask.
5.3
Quay lui, cắt nhánh và CSP
Xây dựng quay lui theo mô hình chọn – kiểm tra – đệ quy – hoàn tác, kết hợp pruning và heuristic.
5.4
Branch-and-Bound và tìm kiếm tăng dần
Tối ưu không gian tìm kiếm bằng cận trên, cận dưới, branch ordering, IDDFS và IDA*.
5.5
Meet-in-the-Middle và tìm kiếm hai phía
Chia không gian trạng thái thành hai nửa để giảm độ phức tạp và ghép kết quả hiệu quả.
6.1
Từ đệ quy đến quy hoạch động
Nhận biết bài toán con trùng lặp và chuyển lời giải đệ quy thành memoization.
6.2
Thiết kế trạng thái và công thức chuyển
Xác định state, transition, base case, thứ tự tính và cách truy vết nghiệm.
6.3
DP một chiều và DP theo tiền tố
Làm quen với các trạng thái tuyến tính trước khi xây dựng bảng DP nhiều chiều.
6.4
Knapsack, Subset Sum và Coin Change
Làm chủ mô hình chọn hoặc không chọn và thứ tự cập nhật trạng thái.
6.5
DP trên dãy con
Giải các bài toán có trạng thái phụ thuộc vào phần tử cuối hoặc độ dài tiền tố.
6.6
DP trên xâu
Thiết kế trạng thái trên một hoặc hai tiền tố của xâu.
6.7
Interval DP và Partition DP
Xử lý bài toán trên đoạn bằng cách tăng dần độ dài và thử các điểm chia.
6.8
DP trên DAG
Tính trạng thái theo thứ tự topo trên đồ thị phụ thuộc không có chu trình.
6.9
DP trên cây
Tổng hợp kết quả từ các cây con và chuyển trạng thái giữa cha với con.
6.10
Digit DP
Đếm các số trong một đoạn bằng trạng thái theo vị trí chữ số và giới hạn tiền tố.
6.11
Bitmask DP và tối ưu DP
Nén tập lựa chọn bằng bitmask và áp dụng các kỹ thuật giảm thời gian hoặc bộ nhớ.
7.1
Cây nhị phân & Binary Search Tree (BST)
Giới thiệu khái niệm cây, các phép duyệt cơ bản và nguyên lý tìm kiếm của BST.
7.2
Cây cân bằng (AVL, Red-Black Tree)
Cách duy trì cân bằng để đảm bảo độ phức tạp O(log n) cho mọi thao tác.
7.3
Segment Tree & Fenwick Tree (BIT)
Các cấu trúc dữ liệu mạnh để truy vấn tổng, cực trị, hoặc cập nhật nhanh.
7.4
Disjoint Union-Find
Disjoint Union-Find dùng để xác định nhóm liên thông.
7.5
Trie
Trie dùng để xử lý chuỗi
7.6
RSQ
7.7
RMQ
7.8
Lazy propagation
7.9
Sparse table
7.10
LCA
7.11
Euler Tour on Tree
8.1
Biểu diễn đồ thị
Dùng danh sách kề và ma trận kề để lưu đồ thị trong bộ nhớ.
8.2
DFS & BFS
Hai thuật toán duyệt cơ bản giúp hiểu cấu trúc và mối liên kết giữa các đỉnh.
8.3
Thành phần liên thông
Xác định số lượng cụm (component) trong đồ thị vô hướng.
8.4
Dijkstra, Bellman-Ford
Tìm đường đi ngắn nhất trong đồ thị có trọng số dương hoặc âm.
8.5
Floyd–Warshall
Tìm đường đi ngắn nhất giữa mọi cặp đỉnh trong đồ thị nhỏ.
8.6
MST: Kruskal & Prim
Tạo cây bao trùm nhỏ nhất cho mạng kết nối bằng thuật toán tham lam.
8.7
Topological sort
8.8
Strongly connected components
8.9
Euler tour
8.10
Network flow
9.1
GCD, LCM & Euclid mở rộng
Tìm ước chung lớn nhất, bội chung nhỏ nhất và cách mở rộng Euclid để tìm nghiệm.
9.2
Modulo & nghịch đảo
Áp dụng modulo trong bài toán lớn và hiểu cơ chế nghịch đảo trong toán học lập trình.
9.3
Một số phương pháp kiểm tra số nguyên tố cơ bản
Hiểu rõ ưu nhược điểm và cơ chế của các thuật toán kiểm tra số nguyên tố cơ bản.
9.4
Tổ hợp & phân tích số
Tính C(n,k), P(n,k) và phân tích số thành tổng hoặc tích các phần tử.
9.5
Sieve of Eratosthenes
9.6
Fast exponentiation
9.7
Chinese remainder theorem
10.1
KMP & Z-algorithm
Thuật toán tìm mẫu trong chuỗi nhanh hơn gấp nhiều lần so với tìm kiếm tuyến tính.
10.2
Rolling Hash
Tăng tốc độ tìm kiếm và so khớp chuỗi bằng cách mã hoá chuỗi thành giá trị hash.
10.3
Palindrome & Substring
Nhận diện và xử lý các chuỗi đối xứng, tìm chuỗi con có tính chất đặc biệt.
10.4
Pattern Matching nâng cao
Ứng dụng thực tế trong kiểm tra chính tả, tìm kiếm văn bản và nhận dạng mẫu.
10.5
Suffix array
10.6
Suffix automaton
10.7
Aho-Corasick
12.1
Phân tích & tối ưu độ phức tạp
Hiểu rõ mối quan hệ giữa thời gian, bộ nhớ và độ phức tạp thuật toán.
12.2
Bài tổng hợp: DP + Graph + Math
Các bài tập kết hợp nhiều chủ đề, rèn tư duy tổng hợp và khả năng phân tích đề nhanh.
12.3
Kỹ thuật debug & code sạch
Phương pháp phát hiện lỗi nhanh, viết code rõ ràng và dễ hiểu trong thi đấu.
12.4
Chiến lược thi đấu & quản lý thời gian
Chiến lược phân tích đề, sắp xếp bài và tối ưu hiệu quả trong các kỳ thi lập trình.
12.5
Upsolving
12.6
Template cá nhân
12.7
Chiến lược phân bổ thời gian
💳 Quét mã ủng hộ tuỳ tâm nhé!