Competitive Programming Training Tips


Over the past couple of weeks, I have been writing about deliberate practice as described in Peak by Anders Ericsson and Robert Pool. The book describes three types of practice: Na├»ve practice, purposeful practice, and deliberate practice. The latter two types of practice are both effective, but there’s a key difference that makes deliberate practice the best choice. The difference is where your training plan comes from. Purposeful practice can be used with any reasonable plan. Deliberate practice requires that you practice using a plan that has been proven to work by an expert who has gone before you and achieved success in your target field.

How might we find an expert training plan for competitive programming? This type of programming is different from regular software development. So it won’t do to use a standard programming training plan, as provided by a university curriculum or a programming boot camp. Competitive programming is taught as a specialty in some universities, where coaches devise their own training plans to build winning teams each year. But that’s only useful if you’re a student at one of those universities. There are a couple of books specifically about competitive programming, including Competitive Programming 3, which I’m in the process of writing a chapter-by-chapter summary for.

But for today’s purposes, I’m going to cover training advice provided by competitive programming experts on Quora, specifically in answers to the question What is the best strategy to improve my skills in competitive programming in 2-3 months? Over time, that question has become a merge target for a number of similar questions, and quite a few experienced competitive programmers have weighed in with suggestions.

« Continue »

Achieving Peak Performance in Competitive Programming


Last week, I wrote about the concept of mental representations, an important topic in Peak by Anders Ericsson and Robert Pool. According to the authors, learners seeking expertise should have as their goal a virtuous cycle between mental representations and deliberate practice: Deliberate practice should produce more effective mental representations, and more effective mental representations should drive better practice.

This week I’ll be covering the other half of that virtuous cycle, deliberate practice.

« Continue »

Mental Representations for Competitive Programming Practice


Psychologist and deliberate practice pioneer K. Anders Ericsson has been studying and writing about deliberate practice for decades, and his landmark 1993 paper provides an accessible introduction to the topic. This year, he published his first book-length exploration of deliberate practice for a general audience. Peak: Secrets from the New Science of Expertise explains the idea of deliberate practice from the ground up, and provides examples of how people have used it in different fields. I started this blog with the goal of studying and explaining deliberate practice techniques for software developers. This week and next, I’ll be applying the ideas from the book to that end. As usual, I’ll be drawing my examples from competitive programming practice.

The topic for this week: Mental representations.

« Continue »

Three-Dimensional Dynamic Programming for UVa 10755


Two weeks ago, I introduced the concept of memoization for dynamic programming, using as an example UVa 787. That problem involves operations on a sequence of integers, a one-dimensional structure. UVa 10755: Garbage Heap increases the problem complexity by organizing its integer data into a three-dimensional shape, a rectangular parallelepiped. Nevertheless, we can use memoization in a similar way to solve this problem.

« Continue »