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:

  1. above 600 points at USACO Gold division;
  2. 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:

PTCTET
Q&A session8am-9am10am-11am11am-12pm
1st lecture9am-11am11am-1pm12pm-2pm
Lunch break11am-12pm1pm-2pm2pm-3pm
2nd lecture12pm-2pm2pm-4pm3pm-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.