- All CPi courses are problem-driven. Most lectures consist of studying a set of related programming problems, explaining the common techniques and ideas to solve them, often with code provided, and sometimes with in-class live coding demonstration.
- Students are given programming assignments, each with a clear problem statement, specification of input/output format and constraints, time and memory constraints, and large number of test cases of input and expected output. Students must pass all test cases of an assignment to receive credit for it.
- All CPi courses will have one or more in-class live coding tests/contests. Students who are unable to finish the problems in class can continue working on them after class within a certain amount of time, receiving reduced points (e.g., at 60%) for solved problems.

**Pre-requisite**: High School Geometry**Description**: CP0 is designed to teach students who have little or no prior exposure to programming how to think computationally and write programs to solve non-trivial problems. The course is taught in a problem driven fashion, where language features and programming techniques are demonstrated using code to solve example problems. The course uses C++, but will focus on the procedural parts of C++ that are largely shared by Java and C. The goal of is not to teach the C++ language, but rather to teach how to program. Emphasis is on effective usage of primitive data types, control statements, arrays, functions, strings, bit operations, and a few classes in STL (e.g., vector, set, map).**Offerings**: First offering will be in**Summer 2020, June 15 to August 7. Lectures: Tuesdays and Thursdays from 1:30pm to 2:20pm.**One lab session on T/Th afternoons, and another on M/W afternoons.**Expected Workload**: In summer (7-week) format, each week 2 hours lecture time, 2 hours lab, 5 to 12 additional hours for homeworks.

**Pre-requisite**: CS 190-CP0 OR CS251 OR instructor approval**Description**: CP1 teaches several commonly encountered techniques to solve programming interview and competitive programming questions, including usage of data structures such as set, map, stack, queue, deque, priority queue, prefix sum arrays, two pointers, sliding window, depth-first search, breadth-first search, binary search, meet-in-the-middle, etc.**Sample Offerings**: Fall 2019**Expected Workload**: Typically offered in Fall and Spring, runs for 13 weeks. Each week has 75 minutes lecture time, 2 hours PSO, 3 to 8 additional hours for homeworks.

**Pre-requisite**: CS290-CP1 OR instructor approval**Description**: CP2 teaches experience programmers additional techniques to solve interview and competitive programming problems, including recursive search with backtracking, simulation and bisection, dynamic programming, linked lists, trees, graph search, topological ordering, union-find and minimal spanning tree, and shortest path. It can be viewed as a programming complement to CS 381.**Sample Offerings**: Spring 2020**Expected Workload**: In regular semester, runs for 13 weeks, each week 75 minutes lecture time, 2 hours PSO, 3 to 8 additional hours for homeworks.

**Pre-requisite**: CS390-CP2 OR instructor approval**Description**: This course's primary objective is to prepare students to participate in ICPC. Course format consists of lectures, problem discussions, with problem sets, .**Offerings**: Spring 2020**Expected Workload**: Typically offered in Fall and Spring, runs for 13 weeks. Each week has 75 minutes lecture time, 5 to 10 additional hours for homeworks.

- Which computer science courses one has taken is not a reliable indicator of which CPi course one should start with. Passing AP Computer Science or CS180 by itself is insufficient to prepare a student to skip CP0 and take CP1 directly. However, if one has taken CS180 and is able to receive an A with no or minimal help from TAs or others on projects, one should be able to skip CP0 and take CP1.
- One good indicator on which CPi course is appropriate is USACO. Look at a recent USACO contest. If one is able to pass Bronze (solving 2.5 problems in about 4 hours), one does not need to take CP0. If one is able to pass Silver, one can probably skip CP1. Similarly, passing Gold means that one should skip CP2.
- In terms of LeetCode, very roughly CP0 is about LeetCode easy, CP1 is about LeetCode medium, CP2 is about LeetCode Hard, and CP3 is beyond LeetCode.