Columbia University · Fall 2026

Advanced Topics in Competitive Programming

Hard algorithms, careful proofs, and implementations that hold up under contest pressure.

Wednesdays, 8:10–10:00 PM · 451 Computer Science Building

Start here

Course
essentials

01SyllabusRequirements and policies02Schedule13 Wednesday meetings03CourseWorksSearch COMS E6998-00204PermissionEmail both instructors05CalendarAdd all class meetings

Fall 2026 · First meeting

Wednesday, September 9

8:10–10:00 PM

The first topic is probability and randomized algorithms.

Where

451 Computer Science Building

Use CourseWorks for any room or schedule update.

Bring

A contest-ready laptop

Come prepared to write, test, and discuss C++ solutions with a small group.

Before class

Check CourseWorks

Look for the opening announcement and first problem set after signing in.

The course

Advanced work, from first principles

E6998 picks up where W4995 leaves off: the more demanding techniques behind later ICPC problems and Codeforces Division 1 contests.

Meeting
Wednesdays · 8:10–10:00 PM
Location
451 Computer Science Building
Level
Graduate · 3 points · in person
Enrollment
Instructor permission required
Office hours
By appointment · email Josh and Christian

Weekly rhythm

Many ways to earn course credit

Each meeting combines a focused lecture with collaborative, timed practice—but there is no single way to build your semester total. After the two required presentations, you can earn points through additional presentations, live contests, weekly homework, independent problem solving, chapter reviews, and announced problemsetting contributions.

  • Roughly five homework problems are assigned each week.
  • Live contests reward participation and at least one correct solve, not a particular rating.
  • Every student gives at least two in-class presentations during the semester and may give more.
  • Textbook chapter reviews are completed only after the corresponding lecture has been given.
  • CourseWorks is the operational home for assignments, submissions, and announcements.

Points and participation

Build your semester total

Earn points through presentations, contests, problem solving, and chapter reviews. The targets are 50 points for a Pass and 100 points for an A. An A+ requires more than 100 points and is awarded at the instructors’ discretion.

Presentation5 points + up to 5 bonus

For each in-class presentation; the bonus recognizes a great presentation. At least two presentations are required, and students may give more.

Rated contest5 points

For a Codeforces or AtCoder rated contest when you solve at least one problem.

ICPC contest10 points + 1 per solve

For the CULC or GNY Regional, plus one additional point for each problem solved. Other designated live contests may be added.

Homework1 point per question

Roughly five homework problems will be assigned each week.

Other problems0.1 point per question

Generic Codeforces, Kattis, and similar problems, capped at 10 points over the semester.

Chapter review2 points + up to 8 bonus

Each textbook chapter review earns two points and may receive up to eight bonus points for exceptional insight. Reviews may be submitted only after the relevant lecture.

ProblemsettingTBA

Credit for problemsetting work—including testing and related contributions—will be announced.

AttendanceExpected

Students are expected to attend most lectures.

See the full syllabus for the complete assessment and academic-honesty policies.

Academic honesty

Claim only work you understand

Follow Columbia’s Standards and Discipline policy and the collaboration rules announced for each assignment.

  • Do not copy or share solution code, falsely claim a solve, or present another person’s work as your own.
  • Acknowledge collaborators and cite permitted editorials, code, AI tools, and other outside sources.
  • Be prepared to explain every solution, review, and presentation for which you claim credit.
  • When in doubt, ask the instructors before submitting.
Read the complete policy →

Before enrolling

Prerequisites

You should arrive comfortable with dynamic programming, graphs, standard data structures, and basic number theory and combinatorics—and able to turn those ideas into working code quickly.

  • COMS W4995 or equivalent competitive-programming experience is strongly recommended.
  • COMS W3134 or W3136, W3203, and CSOR W4231 are recommended.
  • C++ proficiency is strongly recommended; Java or Python may be used when appropriate.
  • If your preparation is less conventional, email both instructors with a short account of your algorithms and contest background.
Request instructor permission

Opening month

W01

Probability and randomized algorithms

Linearity of expectation, concentration, hashing, and randomized choices.

W02

Advanced dynamic programming

State compression, optimization, and patterns beyond the standard toolkit.

W03

Advanced graph algorithms

Structural graph ideas and the modeling decisions that make them useful.

W04

Network flows and matchings

Recognizing reductions, choosing the right formulation, and implementing it reliably.

Topics may move as the semester develops; CourseWorks will carry the current weekly assignment.

References

Useful starting points

Questions

Contact the instructors

Office hours are by appointment. Email Josh and Christian to arrange a time.

Email both instructors