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
Đệ quy cơ bản
Hiểu cơ chế gọi hàm lặp lại chính nó và cách dừng điều kiện cơ sở.
3.5
Chia để trị (Divide and Conquer)
Phân tách bài toán thành các phần nhỏ hơn rồi kết hợp kết quả để tạo thành lời giải hoàn chỉnh.
3.6
Merge Sort & Quick Sort
Hai ví dụ kinh điển của chia để trị – sắp xếp hiệu quả với độ phức tạp O(n log n).
3.7
Amortized analysis
3.8
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
Difference array
4.7
Two pointers
4.8
Sliding window
6.1
Fibonacci tối ưu (Memoization)
Hiểu cách giảm số lần tính toán lặp bằng cách lưu kết quả trung gian.
6.2
Bài toán Balo (Knapsack)
Giải bài toán chọn vật phẩm tối ưu bằng kỹ thuật DP 2 chiều.
6.3
Dãy con tăng dài nhất (LIS)
Xây dựng lời giải quy hoạch động để tìm dãy con tăng dài nhất.
6.4
DP trên bitmask
6.5
DP trên cây
6.6
DP tối ưu không gian
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
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é!