This class provides online training for the USA Computing Olympiad (USACO) Silver Division, a programming competition looked at by colleges and used as a qualifier for the International Olympiad in Informatics (IOI). Classes will be held through a computer with a teacher online via live video conference, and during each lesson students will work on challenging sample problems with the help of a teacher. Then, students attempt a problem set for homework on the same topic covered in class, and are able to ask a TA for help during student help hours.
The goal of this course is to introduce students to topics and strategies essential to scoring well in USACO's Silver Divison, aiming for promotion to Gold Division. The work is mostly in the format of selected USACO (USA Computing Olympiad) problems from past contests. They require good usage of concepts from Bronze Division in combination with more advanced algorithms and higher overall complexity. Algorithms covered include coordinate compression, cycle detection, sliding window, binary search, flood fill, depth-first search and breadth-first search (DFS/BFS), and recursive generation of permutations/combinations. Essential data structures and supporting concepts like maps, priority queues, and Comparators are also covered, and there is continuous discussion of runtime efficiency.
An example Silver problem might require the student's code to track which cows in a stampede are visible to a farmer based on data about their relative positions and movement speed, with a need to efficiently track which cows are visible at different times, including the fact that some cows block vision of others.
This class is taught in Java, although all the algorithms can be translated to the other recommended language for USACO, C++, without much trouble. Java is used worldwide, and learned by most students in North America that study advanced CS in high school. Students will be expected to work in Java for the class. KTBYTE audio lectures can give students a good crash course in Java at a self-guided pace if they are already at an equivalent level in C++. or Python. Consider the KTBYTE core curriculum, [CORE 5a]-[CORE 5b] for a live-classroom format introduction!
This course's problems range in difficulty from relatively simple - chosen to introduce relevant algorithms without getting sidetracked by too many extraneous details - to intermediate - requiring more creative thinking to form an efficient strategy. Note that USACO difficulty changes over time, and many past problems are easier than current ones in the same division. The goal of this class is to build a solid foundation for tackling Silver problems, but there are many topics to learn, and mastery takes much more time. Students should expect to do extensive additional practice after taking this class before they'll feel comfortable tackling many current in-contest problems on their own. We recommend most students follow up this class with [USACO SILVER STUDY], a study group-style class that focuses on in-depth practice working through intermediate-to-hard problems, led by a teacher. Whether self studying or taking [USACO SILVER STUDY], students will find that most solutions they see are formed by using one or more of the strategies learned in [USACO SILVER] - the important skills to practice are analysis, brainstorming, planning, and debugging, not memorization of even more algorithms.
[USACO BRONZE] and [USACO BRONZE STUDY], or current contest placement in Silver division. [CORE 6a] and [CORE 6b] are highly recommended as complementary courses before, during, or immediately after [USACO SILVER] to deepen algorithmic skills.
These are examples of projects that students create as they grow their skills in [USACO SILVER 1]
USACO format, Arrays warm-up
Simulation (Cycle Detection) - blink
Advanced use of Data Structures
Reframing and Linear Sweep
2d Array Problems
Prefix sum review, implementation practice
2d movement, implementation practice
Homework wrap-up, Recursive analysis
Grand Finale - Farmer John Has No Large Brown Cow