About this course

This is a practical hands-on course that is intended for students who are interested in competitive programming and algorithmic challenges. During this course, you will learn how to solve algorithmic programming challenges, both individually and as a team. You will get a lot of practice in creative problem-solving and writing correct and efficient programs quickly. You will learn about useful algorithmic ideas and how to apply them in new contexts. You will learn to use different programming tools for solving different kinds of tasks. You will get to know other students and get practice in solving problems as teams. And we will try to have fun!

What is competitive programming?

Here is a short (2.5 min) video about what competitive programming is:


This course is suitable for students of all levels, from BSc students to PhD students. Students are expected to have a working knowledge of computer programming, algorithms, and data structures, and preferably some practical experience with C or C++ programming languages. Our first meeting will also serve as a prerequisite test; you can there see if you have got sufficient skills to successfully follow this course.

Course format

We will organize two 90-minute practice contests each week. On Mondays, we will usually have solo contests (each student is solving problems as an individual), while on Wednesdays, we will usually have team contests (students are randomly assigned to teams with 2–3 members). We will start each day at 16:15, please be there punctually. In each contest, the submissions are automatically graded, and you will immediately see whether your solution is correct or not. You are primarily competing against yourself, trying to solve as many problems as possible, but in each contest there will also be a scoreboard where you can see your standing in comparison with other students. During the course, you are also encouraged to take part in NCPC, the Nordic Collegiate Programming Contest.

Workload and timeline

Each week there is some self-study material available here in A+, and some homework problems to solve. In addition to the 90-minute practice contests, you are expected to spend 6–8 hours each week to self-study the material and to solve the homework problems.

The recommended weekly routine looks like this:

  • Monday: practice contest

  • Tuesday: try to solve those problems in Monday’s contest that you did not solve yet

  • Wednesday: practice contest

  • Thursday–Friday: do homework to prepare for the coming week.

Course staff and communications

The course is organized by Jukka Suomela, Valtteri Aurela, and Unto Karila. We will use the Zulip workspace at competitive2023.zulip.aalto.fi for communication, and all participants are expected to follow our Zulip discussion forum actively during the course.

Our course staff will be always available during the practice contests—we will help with technical problems all the time, and we will also provide hints during the second half of each contest.

If you have any questions or comments related to any of our course material or the problems, please feel free to post in our public Zulip streams!


To pass the course, you need to solve our homework assignments for at least 9 weeks out of 11, and in addition to this you need to accumulate at least 72 points in our practice contests.

Problems in solo contests are worth 3 points each, and problems in team contests are worth 2 points each (all team members will get points for all problems that the team solved). There are also additional points available for participation in NCPC and other programming contest.

The course grade is determined by the number of points you get:

Total points

Homework assignments solved


≥ 72

≥ 9


≥ 90

≥ 9


≥ 108

≥ 9


≥ 126

≥ 9


≥ 144

≥ 9


The maximum possible number of points is 264, plus the bonus points you can get from NCPC and other contests. You will solve problems in CSES, but we will use A+ to keep track of the scores.

Supercoder badges

In each contest, the final problem is the most challenging task, and everyone who solves it will get a virtual supercoder badge. The top three students with the largest number of badges will get a certificate for the outstanding achievement!

Collaboration rules

In our practice contests and homework assignments, you can freely refer to any written material, both printed and online (this includes reading your own notes, textbooks, language and library reference manuals, and Wikipedia, searching with Google and reading blog posts and answers in online discussion forums). However, you cannot ask for outside help during our practice contests (this includes posting questions in online forums, emailing or calling your friend, or asking AI tools like ChatGPT or Github Copilot). All code that you submit during this course must be written by yourself. You can reuse code you have written earlier, but you cannot copy-paste code from the Internet, you cannot use code written by your friend, and you cannot use code produced by e.g. ChatGPT or Github Copilot. If you take part in NCPC, you must strictly follow the official NCPC rules.

Posting submission...