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


Course Staff

Name Office Hours
Prof. Tiago Januario Google Calendar

Course structure

  • Thursdays and Fridays from 9:00 AM to 12:30 PM
  • 3 and a half hours of intense programming activities
  • Attendance in lectures is mandatory
  • We will use Piazza for online discussions.
  • Do not send me e-mails.
  • Feel free to ask or answer questions on Piazza, share your ideas!
  • For sensitive, specific questions and solutions, use private posts.
The structure of this course is based 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.

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 to change, and likely will, as we progress through the semester.
Lec. Date (Tentative) Topics Reading
01 Thu, May 22 Warm-up
IDE, compilers, Online judges
Create your account on:
Vjudge
Codeforces
Kattis
02 Thu, May 29 Two pointers
Greedy
Complete Search
CSES 8.1
CSES 6
CSES 5
CP4 3, 8, 9
03 Thu, Jun 05 Sliding Window
Binary search
Dynamic programming
CSES 8.3
CSES 3.3
CSES 7
04 Fri, Jun 06 Prefix sum array
Graph traversal
Union-find structure
CSES 9.1
CSES 12
CSES 15.2
05 Thu, Jun 12 Sorting
Bit representation and operations
Bit optimizations: dynamic programming revisited
CSES 3
CSES 10.2
CSES 10.5
06 Fri, Jun 13 Working with numbers
Modular arithmetic
Prime numbers
CSES 1.3
CSES 1.4
CSES 21.2
07 Fri, Jun 20 Fenwick trees
Segment trees
CSES 9.2
CSES 9.3
08 Thu, Jun 26 Final contest Everything so far

Textbooks

You can support the authors by purchasing the books.

Participation, course atmosphere, diversity, and inclusion

  • You will get the full participation points if you attend at least 85% of the possible lectures.
  • If you end up attending x% of the lectures, where x < 85, you will get x/85 of the points.
  • 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 group coding in-person assignments with up to 2 people:
      • 7 attendance quizzes - 1 per lecture
      • 21 short problems - 3 per lecture
      • 21 long problems - 3 per lecture
      • 7 debugging tasks - 1 per lecture
    • 1 individual in-class contest
  • A numerical scale will be used to compute your grade based on the number of completed assignments/category:
    • One quizz – up to 1 point, based on correctness
    • One lecture you attend – up to 1 point based on arrival and departure times
    • One short problem = 1 point, maximum of 2 points per week (noncumulative)
    • One long problem = 1 point, maximum of 2 points per week (noncumulative)
    • One debug task = 1 point
    • One contest – up to 6 points, one per solved problem
  • You have up to one week to contact the staff members to request ONE makeup of a missing assignment (except for the contest).

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 based on points

Your final letter grade is based on the minimum score in all categories.
Letter Attendance (7) Quizzes (7) Short (21) Long (21) Contest (6) Buggy (7)
A 7 6 12 12 4 6
A- 7 6 11 11 3 6
B+ 7 6 10 10 3 6
B 6 5 9 9 3 5
B- 6 5 8 8 2 5
C+ 6 5 7 7 2 5
C 5 4 6 6 2 4
C- 5 4 5 5 1 4
D 5 4 4 4 1 4
F 4 3 3 3 0 3