Topic outline

  • OVERVIEW

    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.

    The course is worth 5 credits. This course is suitable for students of all levels, from BSc students to PhD students. All course material will be in English.

    PREREQUISITES

    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 our course.

    COURSE FORMAT

    During periods I and II, we will organize two 90-minute practice contest each week:

    • Mondays, at 16:15-17:50. These are usually solo contests: each is student solving problems as an individual.
    • Wednesdays, at 16:15-17:50. These are usually team contests: students are randomly assigned to teams with 2–3 person per team.

    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.

    Each week on Wednesday we will announce the topic and the rules of the following week’s contests, and provide pointers to some self-study material. Each week you are expected to spend 6–8 hours on your own to self-study the material. The recommended timeline looks like this:

    • Monday: 1.5 hours, contest
    • Tuesday: 1–2 hours, self-study for Wednesday’s contest
    • Wednesday: 1.5 hours, contest
    • Thursday–Friday: 5–6 hours, self-study for next week’s contests

    During the course, you are also encouraged to take part in NCPC, the Nordic Collegiate Programming Contest.

    We will use Zulip at competitive2022.zulip.aalto.fi for communication, and all participants are expected to follow our Zulip discussion forum actively during the course. All course material will be made freely available online.

    WHAT TO EXPECT

    • 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 (e.g. range query data structures) and how to apply them in new contexts.
    • You will learn about general algorithm design paradigms (e.g. dynamic programming) that are broadly applicable in coming up with new algorithms.
    • You will learn to use different programming tools for solving different kinds of tasks. There will be some practice contests in which some problems are trivial to solve with Python but really hard with C++ and vice versa. You do not need to know C++ or Python in advance, but you should be willing to learn enough of them during the course.
    • You will get to know other students and get practice in solving problems as teams.
    • And we will try to have fun!

    BEFORE THE FIRST MEETING

    • Read this web page completely.
    • Complete the course registration in Sisu as usual.
    • Join the Zulip discussion forum at competitive2022.zulip.aalto.fi using your Aalto user account.
    • Create a CSES user account at cses.fi/register (you cannot use your Aalto user account to log on to CSES).

    The first meeting will be in classroom T8 at the Computer Science building on Monday, September 5, starting at 16:15 sharp. Bring your own laptop (or be prepared to use the computers that are available in the classroom) and be ready to solve some problems.

    COURSE STAFF

    The course is organized by Jukka Suomela, Amirreza Akbari, Navid EslamiAmirabadi, Unto Karila, Henrik Lievonen, Jan Studený, and Hossein Vahidi.

    GRADING

    In each contest you will get points for solving problems:

    • In each solo contest there will be 4 problems, and you will get 3 points for each task that you solved.
    • In each team contests there will be 5 problems, and all team members will get 2 points for each task that the team solved.

    If you take part in NCPC you will get 3 points for each problem your team solves.

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

    • 72 points = grade 1/5
    • 90 points = grade 2/5
    • 108 points = grade 3/5
    • 126 points = grade 4/5
    • 144 points = grade 5/5

    The maximum possible score is 264 (plus extra points you can get from NCPC).

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

    HELP IS AVAILABLE!

    Our course staff will be available during the 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!

    COLLABORATION RULES

    In our practice contests, you can freely read any material (you can freely refer to your own notes, textbooks, and Wikipedia, search with Google, watch YouTube videos etc.) but you cannot ask for help (this includes posting questions in online forums, or emailing or calling your friend).

    If you take part in NCPC, you will need to strictly follow the official NCPC rules.