Is this a good way to get better at CP?
I did a lot of research on the “best way to practice” when it comes to competitive programming, and here is what I got from it:
Don’t bother reading theory, just dive straight into pumping out problems on codeforces. Always do problems in these 2 types of categories:
Speed runs: Doing problems at your rating or lower as fast as possible to build up intuition and speed.
Thinking/suffering runs: Do problems of a rating that is 200-400+ higher than your own (or a rating in which you can only solve the problems 30% of the time),
this helps you get better at solving harder problems and thus actually progressing in rating.
(I heard that it’s best to just do random problems of a certain rating on codeforces rather than doing problems by individual topics like on USACO guide, because you would be spoiling yourself of the problem’s topic, which I definitely agree with)
Read editorial for the problem if you cannot make any meaningful progress after 20 minutes of thinking, don’t just read the entire solution, read hints, then try again for another 5 minutes.
Always write down your solution in brief detail after you solved it, so that you can refer back to it later, and always keep your mind fresh on previously seen tricks so you can keep reapplying them on similar problems, thus improving your pattern recognition.
Always participate in contests, and upsolve the problems that you couldn’t solve/were stuck on.
The only time you should solve problems by individual topics/read up theory is when you haven’t learnt a certain algorithm/technique and you literally don’t know how to implement it in code, and you want to get better at these specific implementations (such as DP, graph algos, etc). Good sources for learning these individual topics are CSES or again, USACO guide.
What do you guys think of this routine?