Learning competitive programming requires a great amount of work. However, there are many ways to practice, and some of them are better than others. When solving problems, one should keep in mind that the number of solved
problems is not so important that the quality of the problems. It is tempting to select problems that look nice and easy and solve them and skip problems that look hard and tedious. However, the way to really improve one’s skills is to focus on the latter type of problems.
Another important observation is that most programming contest problems can be solved using simple and short algorithms, but the difficult part is to invent the algorithm. Competitive programming is not about learning complex and obscure algorithms by heart, but rather about learning problem solving and ways to approach difficult problems using simple tools.
Finally, some people despise the implementation of algorithms: it is fun to design algorithms but boring to implement them. However, the ability to quickly and correctly implement algorithms is an important asset, and this skill can be practiced. It is a bad idea to spend most of the contest time for writing code and finding bugs, instead of thinking of how to solve problems.