Table of Contents
Ask a strong student preparing for olympiad informatics what they are studying and you will often hear a list that grew by accumulation. Suffix automata because somebody mentioned them. Some number theory. A bit of linear algebra because a blog post used it. It is an enormous amount of work and a good deal of it cannot be examined.
The International Olympiad in Informatics publishes an official syllabus, produced by its International Scientific Committee for each olympiad. It classifies topics into six categories, and its exclusions are as carefully specified as its inclusions. Very few of the students we teach have read it.
How the competition actually runs
Two competition days. Three tasks each day. Five hours each day. Contestants compete individually, although each participating country sends a team of up to four students along with a leader and deputy leader. Scoring is partial rather than all or nothing, which is why a strong contestant almost never leaves with zero.
Medals go to roughly the top half of contestants, in a ratio of about one gold to two silver to three bronze to six with nothing, which puts gold at around one in twelve. Worth putting next to a fact that is easy to forget: every person in that room already won a national selection to get there. The distribution above is a distribution among the already selected.
Six categories, not two
A binary in or out would be less useful than what the syllabus actually does. Something can be included with no limit, which means it is assumed knowledge. It can be included but guaranteed to be defined in the task statement, which means you do not need to have met the term before. It can be usable in a solution but never used to phrase a task. It can be outside of focus, which is where anything the syllabus does not mention lands by default. And it can be excluded, either provisionally or explicitly.
The rule that decides everything unmentioned
The syllabus states three rules for topics it does not name. Anything that is a prerequisite of an included topic is included. Anything that extends or resembles an excluded topic is excluded. Everything else is outside of focus. That is enough to classify almost any topic a student is wondering about, without asking anybody.
What is explicitly excluded
On the mathematics side, the excluded list contains most of what a strong mathematics student would assume was relevant. Calculus. Linear algebra. Statistics. Trigonometric functions. Complex numbers. Geometry in three or more dimensions. Modular division and inverse elements. A contestant who is brilliant at all of these has an advantage in almost every other olympiad and none at all in this one.
On the algorithms side the exclusions are more surprising, because they include things competitive programming culture treats as standard equipment. String algorithms and data structures are explicitly excluded, and the syllabus names them: KMP, Rabin-Karp hashing, suffix arrays, suffix trees, suffix automata, Aho-Corasick. So are complex heap variants like binomial and Fibonacci heaps. So is using and implementing hash tables, including collision resolution strategies. So is alpha-beta pruning.
Read excluded precisely, because it does not mean forbidden
The syllabus guarantees that no competition task will require an excluded topic, and that tasks are set so that knowing one should not produce a simpler or higher scoring solution. It then says directly that the syllabus must not be read as restricting the techniques a contestant may apply. So you may use a hash map. You will simply never need to have implemented one.
What that leaves, and why it is not a small course
Dynamic programming is in. Greedy algorithms are in. Minimum spanning trees are in. Tries are in, which is worth pausing on given that the heavier string machinery is not. Balanced binary search trees are in, with the note that problems will not be designed to distinguish between implementations, so a contestant does not need to have written a treap and a splay tree and a scapegoat tree.
Cutting the exotic did not make the syllabus small. It made it deep in fewer places. The student who reaches the top half of an IOI has not learned more topics than the one who does not, they have learned the same topics until recognising them in disguise takes seconds.
An included structure, in twenty lines
Since tries are in and the heavier string structures are out, here is a trie doing something a student might otherwise reach for a suffix automaton to do: counting how many stored words start with a given prefix.
class Trie:
def __init__(self):
self.children = {}
self.passing = 0 # how many inserted words go through this node
def insert(self, word):
node = self
for ch in word:
node = node.children.setdefault(ch, Trie())
node.passing += 1
def count_with_prefix(self, prefix):
node = self
for ch in prefix:
if ch not in node.children:
return 0
node = node.children[ch]
return node.passing
tree = Trie()
for word in ["car", "cart", "carbon", "cat", "dog", "do"]:
tree.insert(word)
for prefix in ["car", "ca", "do", "z"]:
print("%-4s -> %d" % (prefix, tree.count_with_prefix(prefix)))
car -> 3
ca -> 4
do -> 2
z -> 0
Four prefixes, four correct answers, and the counting happens during insertion rather than during the query, which is the same idea as the prefix sums that carry so much of competitive programming. The structure is small enough to write from memory under time pressure, and that is precisely why it is inside the syllabus and the suffix automaton is not.
Getting to the IOI at all
The syllabus tells you what to study. It says nothing about how a student gets into the room, because that is decided nationally and differs sharply from country to country. Almost everywhere the shape is the same though: a national olympiad in informatics, then one or more selection rounds or a training camp, then a team of up to four.
The practical consequence is that the national round is the actual gate, and its syllabus and format may differ from the IOI's. A student preparing purely against the IOI syllabus and ignoring their own country's selection format is optimising the second exam while failing the first.
- Find your national olympiad's own rules first. Its dates, its eligibility, its format, its language rules. This is where more talented students are lost than anywhere else, and it is lost to administration rather than to ability.
- Then use the IOI syllabus as the study map. Its included list is a better curriculum than any course, and its excluded list is permission to stop worrying about half of what the internet says you need.
- Work in C++ once you are serious. It is the only language supported at the IOI, so a path that goes all the way ends there regardless of where it starts.
- Practise on past IOI and national tasks, under the real clock. Five hours for three tasks is a specific endurance and a specific pacing problem, and neither is trainable in twenty minute sessions.
The syllabus is the most under used document in olympiad preparation. It is short, it is free, and it tells a student what not to do, which is the harder half of a study plan.
, What we say in the first session with every olympiad student
How we train for it
Olympiad training goes wrong in a predictable way: a student accumulates topics, feels productive, and never develops the recognition that makes a five hour paper survivable. We work the other way, against the included list only, on past tasks with the topic label hidden, so that identifying what a problem wants is part of the exercise rather than something the section heading gave away.
Our olympiad informatics training is live, one to one or in a batch of five to eight students, taught from India to students worldwide. Students usually arrive from a national round or from USACO Silver or Gold, and the first session is normally spent working out which of the things they have been studying they can safely stop studying. The first class is free.
Frequently asked questions
The International Olympiad in Informatics publishes it on its own website as a PDF, produced by the International Scientific Committee for each olympiad. It is a short document and worth reading end to end once, then keeping open while planning study.
Yes. String algorithms and data structures are explicitly excluded and the syllabus names KMP, Rabin-Karp hashing, suffix arrays, suffix trees, suffix automata and Aho-Corasick. A contestant may still use any of them. No task will require one or reward one with a better score.
Not at all, and this is worth being clear about. Plenty of excluded topics are valuable in competitive programming generally and essential in later computer science. They simply are not what the IOI is testing, so they belong in a student's life after the olympiad rather than in the months before it.
C++, once they are serious, because it is the only language supported at the IOI. Getting there through Python or Java is entirely normal and many national rounds accept more languages, but the transition needs to happen well before the international stage rather than during it.
Less exotic mathematics than students assume, and more comfort with the basic discrete kind. Integers and their properties, modular arithmetic, plane geometry, combinatorics and graph theory carry almost everything. Calculus and linear algebra carry nothing here.
For a student already competing nationally, a year or two of consistent work to be competitive at selection. For a student starting from ordinary school programming, longer, and the honest first step is a graded contest ladder rather than the IOI syllabus, because the syllabus assumes fluency it does not teach.
No. IOI tasks award partial scores, often through subtasks with smaller constraints, so a solution that is correct but too slow for the largest inputs still earns something. This is a genuine difference from many national contests and it changes contest strategy: writing the obvious slow solution first is frequently the right opening move.