Intensive USACO Summer Course
The Intensive USACO Summer Course is designed to help the students sharpen their competitive programming
skills in the summer vacation, when students have more free time to learn.
The course is suited for students scoring:
- above 600 points at USACO Gold division;
- under 300 points at USACO Platinum division.
The online intensive summer course will take place between July 31st and August 14th, 2019 and will be conducted in partnership with Alex, a member of my team.
There will be 8 days of interactive lectures on the 31st of July, 2nd, 4th, 6th, 8th, 10th, 12th, and 14th of August. The remaining 7 days are reserved for homework assignments.
Every lecture day will consist of:
- 1 hour: Q&A session about previous lecture topic and homework;
- 2 hours: 1st interactive lecture session;
- 1 hour: lunch break;
- 2 hours: 2nd interactive lecture session.
You can find the schedule in the table below:
| PT | CT | ET |
Q&A session | 8am-9am | 10am-11am | 11am-12pm |
1st lecture | 9am-11am | 11am-1pm | 12pm-2pm |
Lunch break | 11am-12pm | 1pm-2pm | 2pm-3pm |
2nd lecture | 12pm-2pm | 2pm-4pm | 3pm-5pm |
Syllabus
Lecture Day #1 (Wednesday, July 31st): Number theory & Combinatorics (with Alex)
- Modular arithmetic (including addition, subtraction, multiplication, division)
- Erathostenes Sieve (including prime numbers, instant factorization, number of divisors, sum of divisors, Euler's totient function)
- Combinatorics (including bars and stars, n choose k with repetitions, permutations with repetitions)
- Advanced combinatorics (including Stirling, Bell, Catalan numbers)
Lecture Day #2 (Friday, August 2nd): Dynamic programming I (with Alex)
- Classic problems
- Combinatorics based problems
- Probabilities and expected value problems
- Optimal bracketing problems (including Knuth's optimization)
- Range Minimum Query (RMQ)
Lecture Day #3 (Sunday, August 4th): Dynamic programming II (with Alex)
- Counting permutations problems
- Tree based problems
- Subsets problems
- States problems
Lecture Day #4 (Tuesday, August 6th): Data structures I (with Dan)
- Sorting algorithms I (includig count sort, bucket sort, radix sort)
- Sorting algorithms II (includig merge sort, quick sort, k-th element)
- Disjoint Set Union (with undo)
- Fenwick Trees (update, query, binary search, multidimensional)
Lecture Day #5 (Thursday, August 8th): Data structures II (with Dan)
- Segment Trees (build, element update, segment update, query, binary search)
- Treaps (build, join, split, insert, erase, split by size, queries, split by condition, reverse)
Lecture Day #6 (Saturday, August 10th): Algorithms on strings (with Alex)
- Hash functions, running hashes, rolling hash
- KMP
- Manacher
- Suffix Array (includig Kassai's algorithm for computing the longest common prefix)
Lecture Day #7 (Monday, August 12th): Graph theory I (with Dan)
- From matrix to graph
- DFS (return edges)
- BFS (side edges)
- Flow networks (includig Ford-Fulkerson method, Edmonds-Karp algorithm, Dinic's algorithm, Hopcroft-Karp algorithm, Max-flow min-cut theorem, Dilworth's theorem, applications)
Lecture Day #8 (Wednesday, August 14th): Graph theory II (with Dan)
- Lowest common ancestor
- Centroid decomposition
- Tree traversals
- Heavy-Light decomposition
Notice: This syllabus is intentionally overloaded. If it turns out that the students need more time to comperhend certain topics we won't have time to cover all the listed topics. Conversely, if it turns out that most of the students are familiar with certain topics, we will fast forward them.
Disclaimer: We reserve the right to make small adjustments to the Syllabus.
The price is 1450 USD for 40 hours of interactive lectures and Q&A sessions.
If you'd like to participate, you can contact me.