Competitive Programming in Thailand

A guide for Thai highschoolers

As an international student who competed in the Thai olympiad camps, I found English-language information about the process scarce. This post documents the competitive programming environment and IOI team selection process.

Selection Process

  1. Qualify to take the POSN 1 Entrance exam through TOI-Zero (before mid-June)
  2. Pass the POSN 1 Entrance Exam (signup by late-July, exam is late-August)
  3. Pass the POSN 1 Camp (~50 -> ~30 people per camp, around 32 camps total) (~October)
  4. Pass the POSN 2 Camp (~30 -> 5 or 6 people per camp) (~March)
    1. Note: Passing the POSN 2 Camp guarantees entrance to the computer science department of any Thai university except Chula[^1]
  5. Compete and win a silver/gold medal at the Thailand Olympiad in Informatics (TOI) (~100 -> ~30 people) (April)
    1. Note: Receiving a bronze medal or above guarantees entrance to the computer science department of Chula[^2]
  6. Pass IPST Camp 1 (~30 -> ~20 people) (May)
  7. Pass IPST Camp 2 (~20 -> 4 people) (May/June)

Note: before 2025, the IOI selection process took two years. TOI happened in May, and IPST Camps were run in parallel with POSN camps (October for IPST 1, March for IPST 2). Since 2025, the schedule has been compressed in order for the selection process to only take one year.

Syllabus

Precamp to TOI Syllabus

You can find this syllabus in Thai on the official website: เกี่ยวกับคอมพิวเตอร์โอลิมปิก – มูลนิธิส่งเสริมโอลิมปิกวิชาการและพัฒนามาตรฐานวิทยาศาสตร์ศึกษา (สอวน.) Below is the english version (translated by GPT-4o mini).

| Topic | Pre-Camp 1 | Camp 1 | Camp 2 | TOI | | -------------------------------------------------------------------- | :--------: | :----: | :----: | :-: | | 1. Computer Programs & Development | | | | | | Computer components, software, types of programming languages | ✓ | ✓ | ✓ | ✓ | | Getting started with programming (compiler, IDE, coding) | | ✓ | ✓ | ✓ | | Basic input/output | | ✓ | ✓ | ✓ | | 2. Programming Language Fundamentals (C/C++) | | | | | | C/C++ language structure and basics | | ✓ | ✓ | ✓ | | Data types, variables, constants, operators, expressions, statements | | ✓ | ✓ | ✓ | | Control structures (if, while, for, etc.) | | ✓ | ✓ | ✓ | | Structured programming, flowcharts, pseudocode | ✓ | ✓ | ✓ | ✓ | | Arrays and their use in problem-solving | | ✓ | ✓ | ✓ | | Functions (parameters, return values, scope) | | ✓ | ✓ | ✓ | | Recursive functions | | ✓ | ✓ | ✓ | | 3. Problem Solving via Programming | | | | | | Example problems and coding practice | | ✓ | ✓ | ✓ | | Writing, testing, and judging code (automatic judges) | | ✓ | ✓ | ✓ | | Basic performance analysis, time-complexity calculation | | | ✓ | ✓ | | Sorting algorithms | | ✓ | ✓ | ✓ | | 4. Mathematics for Programming | | | | | | Logic | ✓ | ✓ | ✓ | ✓ | | Sets | ✓ | ✓ | ✓ | ✓ | | Functions & relations | ✓ | ✓ | ✓ | ✓ | | Basic counting, combinations & permutations | ✓ | ✓ | ✓ | ✓ | | Elementary number theory | ✓ | ✓ | ✓ | ✓ | | Basic matrices | | ✓ | ✓ | ✓ | | Basic geometry | ✓ | ✓ | ✓ | ✓ | | Trigonometry | | ✓ | ✓ | ✓ | | Sequences | ✓ | ✓ | ✓ | ✓ | | Series | | ✓ | ✓ | ✓ | | Equations & inequalities | ✓ | ✓ | ✓ | ✓ | | 5. Additional Programming Topics | | | | | | Pointers | | ✓ | ✓ | ✓ | | Classes / structs | | ✓ | ✓ | ✓ | | Debugging basics | | ✓ | ✓ | ✓ | | 6. Graphs, Trees & Networks | | | | | | Undirected, directed & weighted graphs | | | ✓ | ✓ | | Graph types (complete, bipartite), trees, networks | | | ✓ | ✓ | | Trees (general) | | | ✓ | ✓ | | Binary trees | | | ✓ | ✓ | | Spanning trees | | | ✓ | ✓ | | 7. Data Structures | | | | | | Array | | ✓ | ✓ | ✓ | | Stack & queue | | ✓ | ✓ | ✓ | | Linked lists | | ✓ | ✓ | ✓ | | Simple sorting (bubble, selection, insertion) | | ✓ | ✓ | ✓ | | Search (binary search, string search) | | ✓ | ✓ | ✓ | | Applications of data structures | | | ✓ | ✓ | | Associative structures (map, unordered_map) | | | ✓ | ✓ | | Priority queue | | | ✓ | ✓ | | 8. Algorithms & Techniques | | | | | | Algorithm complexity analysis | | | ✓ | ✓ | | Problem modeling | | | ✓ | ✓ | | Binary search | | | ✓ | ✓ | | 2D-array techniques (prefix sums, DFS, BFS, etc.) | | | ✓ | ✓ | | State-space / exhaustive search | | | ✓ | ✓ | | Basic graph algorithms (DFS, BFS, connectivity, MST, Dijkstra) | | | ✓ | ✓ | | 9. Advanced Algorithms | | | | | | Divide & conquer | | | ✓ | ✓ | | Dynamic programming | | | ✓ | ✓ | | Greedy algorithms | | | ✓ | ✓ |

IPST 1 and 2 Syllabus

To my knowledge, the IPST Camps don't have a public syllabus. These were the recommended topics to study for the 2024-2025 IPST Camps (credit: ttamx). You may notice that there are many parallels to the USACO Gold/Platinum/Advanced topics. Additionally, I haven't separated topic lists for the two camps because there's a large amount of overlap in material.

DP Optimization

Data Structures

Graph

Geometry

Decomposition

Techniques

Resources

Thai problems: useful for getting started

  1. programming.in.th one of the most popular
  2. One Tambon One Grader the other most popular
  3. Sheep Grader
  4. GitHub - packmani/toi-posn-com-guide

International problems: these have more problems, higher range of difficulty, and generally higher-quality

  1. Codeforces
  2. AtCoder
  3. USACO
  4. 환영합니다! :: oj.uz (olympiad-style problems, you should start these at ~TOI level)

Topic lists and educational material:

  1. USACO Guide
  2. The Ultimate Topic List
  3. Catalog - Codeforces

Further Reading

A way to Practice Competitive Programming : From Rating 1000 to 2400+

A Highly Experimental Training Plan for Beginners

Enhanced Training roadmap for newcomers

[^1]: To the best of my knowledge

[^2]: Also to the best of my knowledge