Lộ trình ôn thi Olympic tin học & ACM-ICPC

Lộ trình ôn thi Olympic tin học & ACM-ICPC

Lộ trình này được xây dựng để chuẩn bị cho việc ôn thi Olympic tin học SV & ACM-ICPC, nhưng bạn cũng có thể sử dụng để:

  • Các kỳ thi lập trình khác
  • chuẩn bị cho các bài thi phỏng vấn
  • Nâng cao kỹ năng thuật toán
  • Phục vụ các môn tại trường học
  • Đam mê

Yêu cầu với người học:

  • Biết ít nhất một ngôn ngữ lập trình(Bạn phải có khả năng lập trình với ngôn ngữ đó)
  • Có kiến thức & hiểu biết cơ bản về các Cấu trúc dữ liệu cơ bản(Mảng, Stack, Queue,…)(Nếu bạn không biết một trong số đó, hãy học nó khi cần sử dụng trong lộ trình này)

PS: Tôi có nói “Bất kỳ ngôn ngữ nào”, nhưng trong lộ trình này hầu hết sử dụng C, C++ và một chút Java, bạn vẫn có thể follow lộ trình này mà không nhất định phải biết các ngôn ngữ đó

Trong lộ trình ôn thi Olympic tin học & ACM này chúng tôi sẽ chia sẻ link tới các tài nguyên, chúng tôi khi viết lại những gì đã có. Chúng tôi chỉ sưu tập các tài nguyên hữu ích lại một chỗ, và bạn có thể dễ dàng follow để học. Lộ trình này cũng bao gồm các thuật toán và cấu trúc dữ liệu. Bạn nên follow lộ trình này theo từng tuần đã được chúng tôi chỉ định.

Hướng dẫn dành cho bạn

  1. Đi tới nguồn tài nguyên cần học
  2. Tập trung suy nghĩ, cố gắng code và đừng xem lời giải
  3. Khi bạn gặp khó khắn(bạn đã cố gắng hết sức) hoặc đã hoàn thành nhiệm vụ, hãy xem lời giải, so sánh với lời giải của bạn và xem đâu là lời giải tốt nhất cho bài toán đó. Bạn có thể sẽ tìm được những thứ hay ho từ lời giải của người khác.
  4. Khi bạn cảm thấy hài lòng với kiến thức có được, hãy nhớ giải quyết các bài toán của phần kiến thức đó.
  5. Khi bạn hoàn thành hay gặp rắc rối, xem xét các lời giải khác và tìm xem bạn gặp lỗi gì và thấy được một lời giải tốt hơn.

Một số website ôn luyện

Trong lộ trình ôn thi Olympic tin học & ACM này chúng tôi sẽ sử dụng một số tài nguyên cho việc luyện tập. Như đã nói ở trên, các bài toán đã có sẵn, chúng tôi chỉ giúp bạn thấy chúng dễ dàng hơn. Đây là các website/công cụ chúng tôi sử dụng trong suốt lộ trình:

Tôi cung cấp tên của chúng bởi vì có thể bạn sẽ không thể nộp lời giải của bạn hoặc xem bài toán. Vấn đề sẽ tốt hơn nếu bạn tạo cho mình một tài khoản trên đó.

Các kiến thức cần học

Đây là danh sách các chủ đề có trong lộ trình này..

Cấu trúc dữ liệu(DS)

Giải thuật(Algo)

  • Number Theory
    • Prime Numbers (Sieve of Eratosthenes)
    • GCD and LCM Euclid’s Algorithm
    • Modular Exponentiation
    • Long arithmetic (Multi, Add)
    • Efficient Prime Factorization
  • Combinatorics(Probability-Combinations-Permutations-Matrix..)
  • Computational geometry
    • Primitive Operations
      • Intuition
      • Polygon Inside, Outside
      • Implementing CCW
      • Immutable Point ADT
    • Convex Hull
    • Closest pair problem
    • Line intersection
  • Sorting
    • QuickSort
    • Counting Sort
    • Merge Sort
  • Searching
  • Graph Theory
    • Depth First Search (DFS)
    • Breadth First Search (BFS)
    • Dijkstra’s Shortest Path
    • Minimum Spanning Tree
    • Ford Bellman
    • Floyd Warshall
    • LCA (Lowest Common Ancestor)
    • Max Flow / Min Cut
  • Dynamic programming
    • Knapsack
    • Matrix chain multiplication
    • Coin Change
    • Kadane
    • Longest increasing Subsequence (with RMQ)
  • Strings
    • Z algorithm
    • Suffix Trees/Arrays
    • Knuth-Morris-Pratt Algorithm (KMP)
    • Rabin-Karp Algorithm
    • Hash
  • Bit Manipulation
  • Game theory
    • Nim game
    • Grundy numbers
    • Sprague-Grundy theorem
  • Optional Advanced Algorithms
    • AVL Trees
    • Graph Coloring
    • Mo’s Algorithm
    • Palindromic Tree
    • Heavy Light Decomposition
    • Dynamic Programming by Profile
    • Rod Cutting
    • Topological Sorting
    • DP with Bitmask – Dynamic Programming
    • Diobhantine Equation – Math
    • Flood Fill – Graph

Lộ trình học tham khảo

Dưới đây là lộ trình ôn thi Olympic tin học & ACM-ICPC các bạn tham khảo. Mình có để link dẫn tới hướng dẫn chi tiết hơn cho mỗi tuần tại cột Week. Các bạn chỉ việc tiếp tục follow nội dung chi tiết bạn trong đó.

WeekTopicsOptional Topics
Heads Up
  • Big O Notation
Week 1
  • Prime Numbers (Sieve of Eratosthenes)
  • Efficient Prime Factorization
  • Modular Exponentiation
Week 2
  • GCD and LCM Euclid’s Algorithm
  • Long arithmetic (Multi, Sum, Div, Sub)
  • C++ STL:Vector
  • C++ STL:Pairs
  • C++ STL:Iterators
Week 3
  • QuickSort
  • Counting Sort
  • C++ STL:String
  • C++ STL:Set
  • C++ STL:Map
Week 4
  • Merge Sort
  • Binary Search
  • Ternary Search
Week 5
  • Queue (DS)
  • Stack (DS)
  • Breadth First Search
  • Depth First Search
  • C++ STL: Queue
  • C++ STL: Stack
Week 6
  • Linked List (DS)
  • Dijkstra’s Shortest Path
  • Minimum Spanning Tree (MST)
  • Floyd Warshall
  • Cycle Detection (Union Find)
Week 7
  • Knapsack
  • Coin Change
  • Kadane
Week 8Questions from previous topics
Week 9
  • Trees (DS)
  • Segment Trees (DS)
  • Range Minimum Query (RMQ)
  • Lowest Common Ancestor (LCA)
  • Topological Sorting
Week 10
  • Ford Bellman
  • Max Flow / Min Cut
  • Longest increasing Subsequence (with RMQ)
  • Heavy Light Decomposition
Week 11
  • Primitive Operations
    • Intuition
    • Polygon Inside, Outside
    • Implementing CCW
    • Immutable Point ADT
  • Convex Hull
  • Closest pair problem
  • Line intersection
Week 12
  • Tries (DS)
  • Suffix Trees/Arrays (DS)
  • Knuth-Morris-Pratt Algorithm (KMP)
  • Rabin-Karp Algorithm
Week 13
  • Heaps (DS)
  • Priority queue (DS)
  • Combinatorics
Week 14
  • Z algorithm
  • Hash
  • Disjoint Data Structure (DS)
Week 15
  • Matrix chain multiplication
  • SQRT Decomposition (DS)
  • Mo’s Algorithm
  • Rod Cutting
Week 16Questions from previous topics
Week 17
  • Nim game
  • Grundy numbers
Week 18
  • Sprague-Grundy theorem
  • Fenwick tree or Binary indexed trees (DS)
Week 19
  • Bit Manipulation
  • Palindromic Tree
  • AVL Trees
Week 20
  • Heavy Light Decomposition
  • Dynamic Programming by Profile
  • Graph Coloring

Tài liệu luyện thi

  1. http://vnoi.info/wiki/Home
  2. http://www.olp.vn/luu-tru
  3. https://cntt.epu.edu.vn/News.aspx?ID=28
  4. Thi trực tuyến Regional 2017: https://hochiminh17.kattis.com/problems
  5. Thi trực tuyến Regional 2018: https://hanoi18.kattis.com/problems
  6. Lời giải ACM các năm: https://github.com/acmicpc-vietnam/acmicpc-vietnam.github.io
  7. Algorithms used in Competitive Programming

Chúc các bạn sinh viên có một mùa thi Olympic & ACM-ICPC thành công!

avatar
  Subscribe  
Notify of