Posted by : Ezz Wednesday, June 22, 2016

Competitive Programming requires a lot, A LOT of practice. Like, years of practice if you want to excel. You should not lose confidence on failing to solve problems, since this will happen a lot. Even after you're good.
And failing to solve problems is the best way to advance on competitive programming, if you think on a solution until exhaustion. If you lose confidence on a fail, than it's game over. You have to maintain confidence even on a cascade of fails.
It consists of creative/intuitive/pragmatic usage of classical algorithms and data structures. So, any course on Algorithms will improve your knowledge on Competitive Programming. A bit of knowledge on Complexity Analysis and Discrete Mathematics is required for a good solver (For knowing the hidden-constraints of the problem just by reading it).
That said, there are several courses/books dedicated to competitive programming. What they cover are strategies/problem-classifications that allows you to think/devise an algorithm in place. For example, once you implement/solve 50 problems with dynamic programming you will create intuition to identify a problem as solvable through dynamic programming. The main Solving-Strategies/Problems-Type are:
  • Dynamic Programming (Knapsack, 8-queens, Traveling Salesman)
  • Backtracking (8-queens, Sudoku)
  • Greedy Algorithms (Matching Pursuit, Egyptian Fractions)
  • Sorting (Binary Search, Merge-sort)
  • Search/Path-finding (Breadth-First Search, Depth-First Search, Djikstra)
  • Network Flow Problems (Minimum Cut, Max Flow)
  • Combinatorial  (Permutations, Calendrical Calculations)
  • Geometrical (Convex Hull, Minkwoski Sum)

There are several Courses (Free!) for competitive programming:
  • Steven Skiena is one of the best Competitive Programming Teachers, and he has a free course on C2Class (Edited: C2Class seems to be gone. But Skiena uploaded the videos on his youtube channel, I updated the link): Programming Challenges.
  • There's also several course materials online, like the one from Jaehyun Park CS 97SI: Introduction to Competitive Programming Contests.
  • Coursera has 4 great Courses on Algorithms, 2 are more practical "Algorithms" (Algorithms1 Algorithms2), and the other 2 are more Theoretical "Algorithms: Design and Analysis" (AlgoDesign1 AlgoDesign2). The second one (design and analysis) is very similar to a competitive programming course, but it deals with a lot of proofs.

The books I recommend are:

Good tutorials are:

And of course... You need to practice a lot. You already know TopCoder, but there's several other great places to practice:
  • CodeForces: holds competitions almost every week.
  • UVa Online Judge: Has an infinitude of problems for you to solve, its the platform used on Steve Halim Competitive Programming book. Great place to solve a problem from time to time.
  • Google Code Jam: The famous annual competition, you can (and should) solve past problems. 

Also, read a lot of Problem Editorials. Editorials are the analysis, and answer, to a problem done by the problem creator, or another expert.

Source: Quora Answer by Stamatto

{ 1 comments... read them below or add one }

  1. I would be more than happy to know some good sources for problem editorials you have mentioned in the last section of this most helpful article.

    I appreciate the time and effort you put together to share such invaluable knowledge with us. Thanks a lot.



Top 5 Posts

- Copyright © McMaster ACM Chapter | Protected by CloudFlare