Contests and resources
IOI
The International Olympiad in Informatics (IOI) is an annual programming contest for secondary school students. Each country is allowed to send a team of four students to the contest. There are usually about 300 participants from 80 countries.
The IOI consists of two five-hour long contests. In both contests, the participants are asked to solve three algorithm tasks of various difficulty. The tasks are divided into subtasks, each of which has an assigned score. Even if the contestants are divided into teams, they compete as individuals.
The IOI syllabus [41] regulates the topics that may appear in IOI tasks. Almost all the topics in the IOI syllabus are covered by this book.
Participants for the IOI are selected through national contests. Before the IOI, many regional contests are organized, such as the Baltic Olympiad in Informatics (BOI), the Central European Olympiad in Informatics (CEOI) and the Asia-Pacific Informatics Olympiad (APIO).
Some countries organize online practice contests for future IOI participants, such as the Croatian Open Competition in Informatics [11] and the USA Computing Olympiad[68]. In addition, a large collection of problems from Polish contests is available online [60].
ICPC
The International Collegiate Programming Contest (ICPC) is an annual programming contest for university students. Each team in the contest consists of three students, and unlike in the IOI, the students work together; there is only one computer available for each team.
The ICPC consists of several stages, and finally the best teams are invited to the World Finals. While there are tens of thousands of participants in the contest, there are only a small number1, so even advancing to the finals is a great achievement in some regions.
In each ICPC contest, the teams have five hours of time to solve about ten algorithm problems. A solution to a problem is accepted only if it solves all test cases efficiently. During the contest, competitors may view the results of other teams, but for the last hour the scoreboard is frozen and it is not possible to see the results of the last submissions.
The topics that may appear at the ICPC are not so well specified as those at the IOI. In any case, it is clear that more knowledge is needed at the ICPC, especially more mathematical skills.
Online contests
There are also many online contests that are open for everybody. At the moment, the most active contest site is Codeforces, which organizes contests about weekly. In Codeforces, participants are divided into two divisions: beginners compete in Div2 and more experienced programmers in Div1. Other contest sites include AtCoder, CS Academy, HackerRank and Topcoder.
Some companies organize online contests with onsite finals. Of course, companies also use those contests for recruiting: performing well in a contest is a good way to prove one's skills.
Books
There are already some books (besides this book) that focus on competitive programming and algorithmic problem solving:
- S. S. Skiena and M. A. Revilla: Programming Challenges: The Programming Contest Training Manual [59]
- S. Halim and F. Halim: Competitive Programming 3: The New Lower Bound of Programming Contests [33]
- K. Diks et al.: Looking for a Challenge? The Ultimate Problem Set from the University of Warsaw Programming Competitions [15]
The first two books are intended for beginners, whereas the last book contains advanced material.
Of course, general algorithm books are also suitable for competitive programmers. Some popular books are:
- T. H. Cormen, C. E. Leiserson, R. L. Rivest and C. Stein: Introduction to Algorithms [13]
- J. Kleinberg and É. Tardos: Algorithm Design [45]
- S. S. Skiena: The Algorithm Design Manual [58]
1 The exact number of final slots varies from year to year; in 2017, there were 133 final slots. of final slots available