rob00's blog

By rob00, 4 weeks ago, In English

I've just hit my goal of reaching yellow on Codeforces. Thus, I'm celebrating by sharing with everyone what I've learned over the years while trying to improve.

I've done a lot of research on my own when I was at a lower rating, constantly googling and looking at blogs to try to come up with the "optimal practice strategy", and failed every time. So, I think my experience in failing is going to be very valuable to a lot of people reading this.

Let's imagine a very simplified case of what happens when we're doing a problem. When solving a practice problem, these combinations of things can happen:

  1. Solve? Yes/No
  2. Tried a lot of ideas? Yes/No
  3. Used the editorial? Yes/No

Now, here are the simplified rules I follow to tell if I'm improving or not.

  • If you did not solve, did not try a lot of ideas, and did not use the editorial: you did not improve.
  • If you did not solve, did not try a lot of ideas, and did use the editorial: you did not improve.
  • If you did not solve, did try a lot of ideas, and did not use the editorial: you did not improve.
  • If you did not solve, did try a lot of ideas, and did use the editorial: you did improve.
  • If you did solve, did not try a lot of ideas, and did not use the editorial: you did not improve.
  • If you did solve, did not try a lot of ideas, and did use the editorial: you did not improve.
  • If you did solve, did try a lot of ideas, and did not use the editorial: you did improve.
  • If you did solve, did try a lot of ideas, and did use the editorial: you did improve.

In other words, you can tell if you improved by: (tried a lot of ideas) && (solved || used editorial)

In my experience, this has been an easy, simple, and accurate test to determine whether a practice strategy works (or not). For example, let's think about some of the common tips for improving and think about why they work: solving problems around your level. When you solve problems around your level, it typically takes 20-30 min+ of trying your own ideas, and you finally either solve it or you fail and read the editorial. According to my rule, you improve in both cases anyways, so this is an effective strategy.

Now, what strategies don't work? Let's think about solving problems that are too easy. You get the right idea in maybe around 5 minutes, maybe implement, and you're done. You didn't try a lot of ideas. You didn't improve. Now, how about problems that are too hard? You try maybe one or two ideas, get stuck, and can't think of anything else. You didn't try a lot of ideas. You didn't improve, regardless if you try to read the editorial or not. What about studying a lot of algorithms in your free time? You're only reading ideas, and not trying a lot of ideas of your own. You didn't improve (however, the rules imply you do improve if you try to come up with the algorithm on your own first, then read about it after).

But, why is trying a lot of ideas on its own not sufficient for improvement? Because if you don't resolve why those ideas do/don't work, they were pointless. That's why reading the solution or actually getting an AC after you've tried ideas is necessary, because you confirm whether you were right or not.

Finally, I know improvement isn't just a simple yes/no, but I think my heuristic (?) is a very solid starting point for many people here struggling to understand why they're not seeing the results they want.

Bonus

Full text and comments »

  • Vote: I like it
  • +422
  • Vote: I do not like it