First offering
At a glance
- Instructors
- Josh Alman and Christian Yongwhan Lim
- Semester
- Fall 2024
- Meeting time
- Mon + Wed · 5:40–6:55 PM
- Location
- 558 EXT Schermerhorn Hall
- Office hours
- By appointment; contact an instructor by email.
- Course materials
- Fall 2024 syllabus
The course
Description
This is the advanced sequel to COMS W4995 Competitive Programming. We study techniques from the harder half of ICPC regional, championship, and world-finals problem sets and Division 1 Codeforces contests, with a strong emphasis on speed, rigor, and execution under time pressure.
The first offering covered randomized algorithms, linear programming, FFT, number theory, network flow, combinatorics, dynamic-programming optimization, geometry, games, and strings.
Before enrolling
Prerequisites and enrollment
Students were expected to pass a diagnostic test and be comfortable with data structures, discrete mathematics, and programming in C++, Java, or Python. C++ was strongly preferred for contest work.
- Recommended: COMS 3134 or COMS 3136
- Recommended: COMS 3203
- A GPA of 3.8 or above was recommended in the published syllabus.
First offering
Fall 2024 topics
- W01
Randomized Algorithm Casework
Josh + Christian · Logistics, then randomized strategies for navigating adversarial cases.
- W02
Linear Programming
Josh · Model contest problems with constraints, relaxations, and geometric intuition.
- W03
ICPC World Finals Simulation
Course team · A full-pressure mirror replaced the scheduled classroom lecture.
- W04
Fast Fourier Transform
Christian · Convolution as a contest primitive: recognize it, implement it, deploy it.
- W05
Number Theory
Christian · Modular arithmetic and number-theoretic tools for constructive problems.
- W06
Flow + Min-Cost Max-Flow
Christian · Turn matching, allocation, and routing stories into network-flow models.
- W07
Enumerative Combinatorics
Josh · Count complicated objects by exposing the right recurrence or symmetry.
- W08
Combinatorial Games
Guest lecturer · Grundy numbers, impartial games, and the moment a position becomes arithmetic.
- W09
Dynamic Programming Optimization
Christian · Push a correct recurrence from too slow to contest-ready.
- W10
Geometry
Josh · Robust geometric reasoning under precision and implementation pressure.
- W11
Strings
Christian · Pattern structure, efficient matching, and string data structures.
- W12
Advanced Topics
Josh · A capstone session beyond the standard competitive-programming toolkit.
- W13
Geometry Revisited
Etienne Vouga · A guest-led return to geometry with a new lens and deeper techniques.
Expectations
Requirements and assignments
- Pass the diagnostic test with a score of at least 8/10.
- Attend Monday and Wednesday lectures.
- Submit correct solutions to at least half of the homework problems.
- Present at least seven solutions during Monday lectures.
- Participate in at least seven Sunday practice contests.
- Participate in at least five live Codeforces contests.
- Participate in the ICPC World Finals mirror, NAQ, Columbia Local Contest, and GNY Regional if qualified.
There was no midterm or final exam. Course work centered on solving problems, explaining solutions, and participating in timed contests.
Keep practicing
Resources
- Competitive Programming 4Steven Halim, Felix Halim, and Suhendry Effendy
- Guide to Competitive ProgrammingAntti Laaksonen
- CodeforcesContests, ratings, and problem archive
- Columbia Competitive ProgrammingCommunity and course offerings