Tất cả lộ trình luyện tập
-
2Đã tham gia
Lập Trình Căn Bản Python
Lập trình Python 3 là nền tảng giúp học sinh chuyển từ việc giải quyết vấn đề bằng suy nghĩ tự nhiên sang mô tả lời giải bằng những bước chính xác mà máy tính có thể thực hiện. Bắt đầu từ biến, kiểu dữ liệu, biểu thức và cấu trúc điều khiển, người học dần hình thành khả năng phân tích bài toán, truy vết chương trình và tổ chức lời giải thành các hàm rõ ràng. Khi đã nắm vững chuỗi, danh sách, tập hợp và từ điển, học sinh có thể giải quyết những bài toán xử lý dữ liệu phức tạp hơn, đồng thời tiếp cận các thuật toán tìm kiếm, sắp xếp, tổng tiền tố, hai con trỏ và cửa sổ trượt. Những kiến thức về kiểm thử, gỡ lỗi, độ phức tạp và tổ chức chương trình tiếp tục giúp người học không chỉ viết được chương trình mà còn hiểu vì sao chương trình hoạt động đúng, khi nào lời giải chưa đủ hiệu quả và cần cải tiến ở đâu. Đây là nền tảng để chuyển tiếp sang cấu trúc dữ liệu và thuật toán, lập trình thi đấu cũng như phát triển các ứng dụng Python thực tế.
- 4 phần, 157 bài tập
-
1Đã tham gia
Con trỏ trong lập trình C++
Con trỏ (Pointer) là một trong những phần quan trọng nhất để học sinh hiểu C++ ở mức sâu hơn việc chỉ biết viết cú pháp, bởi nó cho thấy chương trình thực sự liên hệ với bộ nhớ như thế nào: một biến nằm ở một vị trí, địa chỉ của biến có thể được lưu lại, và thông qua địa chỉ đó ta có thể đọc hoặc thay đổi chính dữ liệu gốc. Khi nắm chắc &, *, nullptr, quan hệ giữa mảng và con trỏ, cách truyền địa chỉ vào hàm, chuỗi kiểu C, new/delete và vòng đời vùng nhớ, học sinh sẽ hiểu rõ hơn vì sao nhiều đoạn C++ hoạt động đúng hoặc sai thay vì chỉ ghi nhớ mẫu code. Phần con trỏ cũng rèn khả năng trace chương trình rất tốt, vì mỗi bước đều buộc người học phân biệt giá trị, địa chỉ, đối tượng đang sống và pointer đang trỏ tới đâu. Mục tiêu của chuyên đề này không phải dẫn sang linked list, tree hay các cấu trúc dữ liệu phức tạp, mà là làm cho nền tảng Pointer thật chắc; khi học sinh có thể tự giải thích p, *p, &p, p+i, T**, one-past, dangling pointer, memory leak và use-after-free một cách tự nhiên thì các phần C++ và lập trình thi đấu sau này sẽ dễ tiếp cận hơn rất nhiều.
- 1 phần, 50 bài tập
-
1Đã tham gia
Stack (Ngăn Xếp)
Stack là một trong những cấu trúc dữ liệu đầu tiên mà người học lập trình thi đấu cần nắm thật chắc, nhưng giá trị của nó không chỉ nằm ở vài thao tác quen thuộc như push, pop hay top. Bản chất của Stack là nguyên tắc vào sau, ra trước (LIFO - Last In, First Out), và từ nguyên tắc rất đơn giản đó lại mở ra một loạt kỹ thuật quan trọng xuất hiện xuyên suốt Competitive Programming. Khi gặp một phần tử chưa thể xử lý ngay, ta có thể đưa nó vào Stack để “chờ”, rồi chỉ lấy nó ra khi xuất hiện thông tin mới đủ để giải quyết. Chính cách tư duy này giúp Stack xuất hiện tự nhiên trong kiểm tra ngoặc và cấu trúc lồng nhau (Nesting), phân tích biểu thức (Expression Parsing), mô phỏng lịch sử thao tác, thay đệ quy bằng Stack, xây Min Stack, Max Stack, xử lý Stack đơn điệu (Monotonic Stack), tìm phần tử lớn hơn hoặc nhỏ hơn gần nhất, giải Histogram, đếm đóng góp của phần tử trên các đoạn con (Contribution Counting), xây cây Cartesian (Cartesian Tree), kết hợp với Quy hoạch động (Dynamic Programming - DP), Tham lam (Greedy), DFS không đệ quy (Iterative DFS), thuật toán Hierholzer cho đường đi Euler, cho tới những kỹ thuật nâng cao như Stack bền vững (Persistent Stack), Rollback và xử lý Offline. Điều quan trọng nhất khi học Stack không phải là thuộc lòng một mẫu code, mà là nhìn ra được câu hỏi: “Những phần tử nào đã xuất hiện nhưng vẫn chưa được giải quyết?” Nếu xác định đúng nhóm phần tử đó và hiểu rõ điều kiện khi nào chúng phải vào Stack, khi nào chúng phải rời Stack, ta sẽ thấy rất nhiều bài tưởng như phức tạp thực ra chỉ là những biến thể khác nhau của cùng một ý tưởng. Vì vậy, lộ trình này được xây theo từng giai đoạn từ nền tảng LIFO đến các kỹ thuật Stack nâng cao, giúp người học không chỉ biết dùng Stack mà còn hình thành phản xạ nhận dạng đúng bản chất bài toán và lựa chọn Stack đúng lúc.
- 1 phần, 14 bài tập
-
9Đã tham gia
Toán Học Trong Lập Trình CP
Trong lập trình thi đấu, nhiều bài toán tưởng như yêu cầu một thuật toán phức tạp nhưng thực chất có thể được giải quyết rất ngắn gọn nếu nhận ra cấu trúc toán học bên trong. Toán học trong Competitive Programming không chỉ là ghi nhớ công thức. Điều quan trọng hơn là rèn luyện khả năng: - Nhìn dữ kiện và nhận ra quy luật. - Chuyển mô tả bài toán thành biểu thức toán học. - Biến đổi công thức để giảm độ phức tạp. - Chứng minh tính đúng đắn của thuật toán. - Nhận ra khi nào không cần mô phỏng. - Chuyển từ vét cạn sang công thức hoặc thuật toán tối ưu. - Xử lý chính xác các bài toán với số nguyên rất lớn. - Kết hợp toán học với các kỹ thuật thuật toán khác. Lộ trình này được xây dựng theo hướng: **Nền tảng toán học → nhận dạng cấu trúc → biến đổi → công thức → thuật toán → tối ưu → thực chiến.** Mục tiêu cuối cùng không phải là thuộc nhiều công thức mà là hình thành phản xạ: > Khi gặp một bài toán mới, biết phải quan sát đại lượng nào, đặt biến gì, biến đổi ra sao và sử dụng công cụ toán học nào.
- 2 phần, 47 bài tập
-
5Đã tham gia
-
2Đã tham gia
Queue (Hàng Đợi)
Queue là cấu trúc dữ liệu hoạt động theo nguyên tắc FIFO: phần tử vào trước được lấy ra trước. Trong lập trình thi đấu, Queue không chỉ dùng để mô phỏng mà còn là nền tảng của BFS, Topological Sort, Multi-source BFS, 0-1 BFS, Monotonic Queue, Sliding Window và nhiều tối ưu Quy hoạch động quan trọng.
- 1 phần, 12 bài tập
-
3Đã tham gia
Prefix Sum — Tổng tiền tố
**Prefix Sum — Tổng tiền tố** là một trong những kỹ thuật nền tảng quan trọng nhất trong lập trình thi đấu.
- 1 phần, 19 bài tập
-
2Đã tham gia
Hai con trỏ (Two Pointers)
Lộ trình giúp học viên nắm vững kỹ thuật Hai con trỏ (Two Pointers) từ cơ bản đến các biến thể thường gặp trong lập trình thi đấu. Học viên sẽ học cách nhận biết bài toán phù hợp, lựa chọn vị trí hai con trỏ, xác định quy tắc di chuyển và tối ưu các lời giải vét cạn.
- 2 phần, 6 bài tập
-
6Đã tham gia
Lập Trình cơ bản
Đây là lộ trình dành cho những bạn mới vào học lập trình hoặc mới đổi sang ngôn ngữ lập trình mới
- 3 phần, 20 bài tập