Boston University - Spring 2025
CAS CS 392 - Competitive Programming I


Course Staff

Name Office Hours
Prof. Tiago Januario Fridays, 2:00 p.m. - 3:00 p.m. at CAS 213
Thursdays, 10:00 am - 11:00 am at CDS 911
Teaching assistant: Champ Laksanawisit Fridays, 1:00 p.m. - 4:00 p.m. at CAS 213

Course structure

  • 3 hours of intense programming activities
  • Attendance in lectures is mandatory
  • We will use Piazza for online discussions.
  • Do not send e-mails to the course staff.
  • Feel free to ask or answer questions on Piazza, share your ideas, but not your code.
  • You are not allowed to post solutions online.
  • For sensitive, specific questions and solutions, use private posts.
The structure of this course is base on CS 104c: Competitive Programming offered by Etienne Vouga and Glenn P. Downing at University of Texas - Austin.

Student Learning Outcomes

A competitive programming course enhances participants' algorithmic problem-solving and data structure skills. It emphasizes efficient code writing, improving proficiency in a specific language, and developing a competitive mindset with effective time management.

Course Objectives

The course emphasizes debugging techniques, mathematical and logical thinking, and fosters a competitive mindset. Additionally, it covers problem-solving patterns, and encourages consistent practice to excel in coding competitions and real-world software development scenarios.

Communication

  • We will use Piazza for online discussions.
  • Do not send e-mails to the course staff.
  • Feel free to ask or answer questions on Piazza.
  • For sensitive, specific questions and solutions, use private posts.

Prerequisites

  • CS131 - Combinatoric Structures, or equivalent.
  • CS111 - Introduction to Programming I, or equivalent.

Syllabus

This course covers essential algorithms for competing in the ACM International Collegiate Programming Contest (ICPC) and similar contests. Active involvement in weekly contests is a mandatory component of the course. Topics covered include standard library classes and data structures, competitive programming contest strategies, string manipulation, divide and conquer, dynamic programming, graph algorithms, number theory, computational geometry, and combinatorics.

Schedule

This schedule is subject, and likely, to change as we progress through the semester.
Lec. Date (Tentative) Topics Reading Assignment
01 Mon, Jan 27 Two pointers
Slide Window
CSES 8.1
CSES 8.3
Homework 01
02 Mon, Feb 03 Prefix sum array
Sortings
CSES 9.1
CSES 3
Homework 02
03 Mon, Feb 10 Greedy CSES 6
Homework 03
04 Tue, Feb 18 Complete Search CSES 5
CP4 3, 8, 9
Homework 04
05 Mon, Feb 24 Contest 01 - In Class Homework 05
06 Mon, Mar 03 Dynamic Programming Homework 06
07 Mon, Mar 17 Network flow Homework 07
08 Mon, Mar 24 Matching Homework 08
09 Mon, Mar 31 Contest 02 - In Class Homework 09
10 Mon, Apr 07 Mathematics Homework 10
11 Mon, Apr 14 String processing Homework 11
12 Wed, Apr 23 Computational geometry Homework 12
13 Mon, Apr 28 Contest 03 - In Class Homework 13

Textbooks

You can support the authors by purchasing the books.

Attendance, atmosphere, course atmosphere, diversity and inclusion

  • Attendance will be tracked with Piazza polls.
  • We intend to provide a positive and inclusive atmosphere in classes and on the associated virtual platforms.
  • If you require special accommodations for exams or coursework, please send a private message to an instructor and forward any relevant documentation from Disability and Access Services.
  • If you are facing unusual circumstances during the semester, please reach out to us early on so that we can find a good arrangement.
Your suggestions are encouraged and appreciated. Please let us know ways to improve the effectiveness of the course for you personally or for other students.

Grading Rubric

  • Your grade will be based on the EMRN rubric.
  • The rubric was created by Rodney Stutzman and Kim Race, where it originated as the "EMRF" rubric in a 2004 article in Mathematics Teacher magazine.
  • Classwork will consist of:
    • Weekly homework coding assignments with:
      • 3 short problems
      • 3 long problems
      • Buggy code
    • 3 In-class contests
    • Solve a minimum number of problems in at least one Codeforces live contest according to the following scale:
      • 1 problem from Division I, or
      • 2 problems from Division II, or
      • 3 problems from Division III, or
      • 4 problems from Division IV.
  • A numerical scale will be used to compute your grade based on the number of completed assignments/category:
    • One homework problem – 1 point
    • One lecture you attend – 1 point
    • One solved Buggy code – 1 point
  • You have up to one week to contact the staff members to request a makeup assignment.
  • Can do this up to 3 times/assignment per category

Scores for each category

Category Score Make up
Attendance
Total: 13
1 per lecture you attend You can make up attendance
by hosting a workshop on Fridays

Only three times per semester!
Short description problems
3 per homework
Total: 39
1 per each ”short"/"long" problem you solve Request a make up within
one week after the deadline
or before the end of the semester
(whatever comes first).

Only three times per semester!
Short long problems
3 per homework
Total: 39
Buggy code
Total: 13
1 per each code you fix
(must use the provided code)
Contests
Total: 3
8 problems per contest
1 per problem solved during the contest Request a make up within
one week after the event
or before the end of the semester
(whatever comes first).

Only once times per semester!

Bonus points

  • One bonus problem will be added so some homework assignments. Each bonus problem awards you one point. You can use each extra point in any of the following categories:
    • Short problems
    • Long problems
  • You can't use bonus points in any of the following categories:
    • Buggy code
    • In class contest
    • Codeforces live contest
    • Attendance

Course Policies

  • In this class, we permit discussing problem solutions with other students, asking others for conceptual help with a problem, looking online for tutorials explaining how to solve a problem, or getting help from a classmate debugging code you wrote. However, all code you turn in must be your own. The penalty for copying code (either from another student or the Internet) is an F in the course.
  • We will compare your programming assignments with JPLAG. You may share design ideas with your fellow students. You may not share code in any way.
  • Title IX is a federal law that protects against sex and gender-based discrimination, sexual harassment, sexual assault, sexual misconduct, dating/domestic violence, and stalking at federally funded educational institutions. Boston University is committed to fostering a learning and working environment free from discrimination in all its forms.

Grade distribution

Your final letter grade is based on the minimum score in all categories.
Letter Attendance Short Long Contest Buggy Codeforces*
A 13 36 33 9 13 1
A- 12 33 28 8 12 0
B+ 11 29 23 7 11 0
B 10 25 18 6 10 0
B- 9 21 13 5 9 0
C+ 8 17 12 4 8 0
C 8 13 11 3 7 0
C- 7 12 10 2 6 0
D 7 11 9 1 5 0
F 6 10 6 0 4 0