Training Resources

We use a rating to indicate the target audience of each resource. One means it is suited for people with little to no experience in competitive programming, two mean it is suited for people with some experience in competitive programming, and three mean it is suited for people experienced in competitive programming. Some links have multiple ratings when they are suited to different levels.

Learning to Program

You can use most languages for competitive programming (like Java, C++, Python, even OCaml!), but the most popular language is C++. Here we include some resources for people that want to learn C++.

We also include some tips and tricks on how to optimize your language for competitive programming with things like macros and fast IO. For C++ users we highly recommend learning about the STL (Standard Library). This is a really powerful library that contains many data structures and algorithms that are really useful in competitive programming.

Learning Algorithms

There are a ton of resources on algorithms for competitive programming. Here we highlight a sample of the best resources, some of which are targeted at beginners and some for more advanced coders. Note that to become good at competitive programming you really need to practice by solving new problems and participating in contests, so do look at the next section on where to practice to complement your readings.

We will first look at some general resources.

We will now list some resources that are topic specific. These will all be advanced topics and we recommend you get experienced with the fundamentals of competitive programming (using some of the above resources) before looking at these:

Practicing Problems and Contests

There are several websites available to practice competitive programming. Some are problem repositories, where you can find and submit solutions to a collection of problems. Some are contest websites that host regular contests of different levels. Usually the latter also have a large repository of problems you can solve outside of contests. Both play important roles because to get better at competitive programming you need to solve lots of different kinds of problems, but also practice in actual contests (or simulations of contests), much like our weekly sessions.

Here is a list of problem repositories.

Here is a list of contest websites: