News
22.04.2022

Tutorials assigned & Exercise Sheet 2Dear students, you now can see your assigned tutorial on your personal status page. Tutorials will start next week (from 25.04. onwards). Please note that the tutorial on Mondays will start at 16:00 sharp, whereas the Tuesday tutorials will start... Read more Dear students, you now can see your assigned tutorial on your personal status page. Tutorials will start next week (from 25.04. onwards). Please note that the tutorial on Mondays will start at 16:00 sharp, whereas the Tuesday tutorials will start at 14:15. During the tutorials, sample solutions for the past exercise sheets will be presented. Furthermore, we will discuss debugging and testing techniques and you will be given extra competitive programming tasks to train. The exercises for week 2 have also been released. You can switch between different weeks on the judge system by using the button in the upper right corner. 
13.04.2022

First lectureDear students, the Competitive Programming lecture will start tomorrow (Thursday, 14.04.) at 16:00 s.t. / sharp in HS002, E1.3. We will also broadcast the lecture via Zoom. The link to join the meeting is available in the materials section. The lecture will also... Read more Dear students, the Competitive Programming lecture will start tomorrow (Thursday, 14.04.) at 16:00 s.t. / sharp in HS002, E1.3. We will also broadcast the lecture via Zoom. The link to join the meeting is available in the materials section. The lecture will also be recorded and uploaded afterwards. 
Competitive Programming
Advanced Course, 6 CP
Competitive Programming is the art of solving algorithmic problems and implementing solutions in a timeconstrained environment. Such problems usually need insight into algorithms and efficient implementation to be solved successfully. This course will deal with general solution techniques as well as the algorithmic background knowledge to compete in programming contests. Since practice makes perfect, this course will include many tasks from previous competitions as handson exercises.
Aside from preparing for competitions, the goal of this lecture is to improve programming ability and apply algorithms that are usually only taught theoretically.
Prerequisites
You should be able to write basic programs in C++, Java, Python or Rust. Code examples in the lecture will use C++.
Some knowledge of algorithms as taught in Grundzüge von Algorithmen und Datenstrukturen is an advantage.
You will need your own laptop to solve problems on exercise sheets and participate in the exam. If you don't have access to a laptop, please contact the lecture staff.
Course Preparation
If you want to prepare for the course, we recommend having a look at the book "Competitive Programming 3" which is available for registered students in our Materials section. If you already want to practice on some competitive programming tasks, you may have a look at the UVa Online Judge. The linked book recommends some problems on this website for each topic.
More problems can be found in the Codeforces problem set. Codeforces also hosts competitive programming contests about once a week.
Dates
Lectures: Thursdays 16:0018:00 onsite in HS002, E1.3.
Lectures will likely be livestreamed and recorded as well if technically possible.
Topics
These topics are preliminary and subject to change.
 Introduction to C++ for contests
 Basic algorithmic ideas
 Bruteforce
 Backtracking
 Greedy algorithms
 Dynamic Programming
 Divide & Conquer
 Dynamic Programming
 Graphs
 Breadthfirst search and depthfirst search
 Shortest paths
 Topological sorting
 Strongly connected components
 Articulation points and bridges
 Maximum Flow and Matching
 Finding subgraphs
 Trees
 Lowest common ancestor
 Minimal spanning tree
 Mathematical Basics
 Segment trees
 String algorithms
 Parsing
 Geometric problems
Weekly Exercises
There will be weekly exercises. Exercises will be purely practical and consist of a set of problems (usually about 4) that have to be solved, implemented and submitted. Solutions will be graded automatically against a set of test cases. Possible verdicts are Correct, Wrong Answer (your program produced wrong output), Time Limit Exceeded (your program took too long to compute an output) or general errors such as Compilation Error or Runtime Error. You are allowed to submit solutions for exercise sheets and exams in C++, Java, Python and Rust (to be confirmed).
Points will be awarded iff your solution is accepted as correct by our automated judge. You will need to reach 50% of all possible points to be admitted to the exam.
Exams
Exams are practical contests. You are given a set of problems where you have to find, implement, and submit a solution. Exam solutions are implemented on your computer (inside of a VM provided by us with no internet connection), submission is possible through a portal provided by us.