Competitive Programming in Thailand
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
- Qualify to take the POSN 1 Entrance exam through TOI-Zero (before mid-June)
- Pass the POSN 1 Entrance Exam (signup by late-July, exam is late-August)
- Pass the POSN 1 Camp (~50 -> ~30 people per camp, around 32 camps total) (~October)
- Pass the POSN 2 Camp (~30 -> 5 or 6 people per camp) (~March)
- Note: Passing the POSN 2 Camp guarantees entrance to the computer science department of any Thai university except Chula1
- Compete and win a silver/gold medal at the Thailand Olympiad in Informatics (TOI) (~100 -> ~30 people) (April)
- Note: Receiving a bronze medal or above guarantees entrance to the computer science department of Chula2
- Pass IPST Camp 1 (~30 -> ~20 people) (May)
- 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
- Knuth-Yao optimization
- D&C optimization
- Slope trick
- Langrangian relaxation
- 1D/1D, 2D/1D
- Matrix chain multiplication
- Matrix exponentiation
Data Structures
- Fenwick tree
- Segment tree
- Lazy propagation
- Persistent segment tree
- Treap (Cartesian tree)
- Wavelet tree
- Segment tree beats
- Merge sort tree
- Sparse table
- Static top tree
Graph
- Kosaraju
- Tarjan
- LCA (binary lifting)
- 2-SAT
- Euler tour technique
- Min cut / Max flow (duality)
- Modular division
- Gaussian elimination
- String matching
Geometry
- Convex hull trick O(n log n)
- Convex hull trick O(n)
- Graham scan / Monotone chain
Decomposition
- Sqrt decomposition
- Centroid decomposition
- Heavy-light decomposition
- BCC / 2CC (Bridge-connected / 2-connected components)
- Sack
Techniques
- Mo’s algorithm
- Parallel binary search
- CDQ
- Li Chao tree
- Alien Trick
Resources
Thai problems: useful for getting started
- programming.in.th one of the most popular
- One Tambon One Grader the other most popular
- Sheep Grader
- GitHub - packmani/toi-posn-com-guide
International problems: these have more problems, higher range of difficulty, and generally higher-quality
- Codeforces
- AtCoder
- USACO
- 환영합니다! :: oj.uz (olympiad-style problems, you should start these at ~TOI level)
Topic lists and educational material:
Further Reading
A way to Practice Competitive Programming : From Rating 1000 to 2400+