I'm writing this blog as a brief account of my journey from expert to candidate master. If you're someone who has been stuck in expert for a really long time and is trying to reach purple, I think this blog is worth reading. About me: I reached candidate master last week in Codeforces Round 850, before that I had been stuck in expert for a very long period of time, if you'll look at my rating graph, you can see that I reached expert in April 2020, and finally managed to reach candidate master in Feb 2023, which means I've basically been stuck in expert for almost 3 years. At multiple times I thought that maybe becoming a candidate master requires some sort of innate talent that I just don't have, but finally it has happened, and here's what I've taken away from all of this.
So I started giving contests on Codeforces in Jan 2020, in my first year of college. Initially, my main source of practice was Codechef long challenges, but I shifted my focus to giving Codeforces contests pretty soon. Things were going good and I reached expert in April, and I was one of the first ones to do so in my college batch, so I was pretty proud at that time. I figured that with a reasonable amount of practice, I should become purple soon, and I started working towards that. But then I don't know what happened, no matter what I did, I just wasn't able to gain rating. Many people in my college batch had started to reach purple at this point, and I was getting really stressed as to why I wasn't getting there. I started putting more and more pressure on myself to become purple, and that just made my performances even worse.
I was starting to feel like I'm lacking some sort of intelligence/smartness that's required to reach purple, since none of my friends had struggled as much as me to get there. I once had a very interesting discussion with my friend rockstar2514 regarding what exactly does one need to get good at problem solving, not just for competitive programming, but for science in general. We came up with an idea that problem solving requires 3 things on our part:
Memory: This is just pure memorization, you just write whatever you know exactly, without thinking much. It helps with very straightforward problems where you know exactly what the problem and you can write the solution without putting in much thought.
Analogy: This is a very important skill. You understand the problem, simplify it a little bit, and you try relating it to another similar problem that you've solved before. Once you can correctly relate the problem to something similar you've solved earlier, then the solution is pretty straightforward.
Creativity: This is the most difficult and elusive part for most people. This is needed when you have very little background on a problem, and yet you manage to create some way to solve it, in a way which you may have never thought about before.