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 exactly recall whatever you know, without thinking much more than that. In CP, this is useful generally when you have to write some well known data structure or algorithm, example, suppose you want to write the code for fast exponentiation, you wouldn't think much about it and you'd be able to write the code quickly from whatever's there in your memory.
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.
After this discussion I kind of realised that throughout my life, I've never really been great at the creativity part. My strength has always been that I have a decent memory. I could look at some problem and relate it to another problem I solved very long ago, but rarely I could come up with completely new approaches, irrespective of how long I took to think about the problem. That is also pretty much how I got through high school, through memory and analogy. I believed that if I kept practicing I could improve these two, but the creativity part seemed very difficult to improve. I started to think that maybe becoming purple requires some level of creativity that I just can't reach.
After giving myself all these excuses I took a little break from coding, and one fine day I came across Radewoosh's blog. In case you haven't read the blog, you should definitely give it a read, it gave me a lot of insight. In short, what I took away from the blog was that, one common trait among people who excel at CP is that all of these people devoted some part of their daily lives to solving these problems passively. It's not just about actively sitting in front of your computer and practicing, but rather about how sometimes you tend to think about these problems while doing your daily chores and going about with your day. I realized that somewhere on my way, I had lost this. Earlier when I used to give long challenges, I used to think about problems even in the most random places. I once solved a problem while I was waiting for my friend in the volleyball court. The excitement after that to come to your room quickly and submit the code to check if it'll get accepted or not is unparalleled. I realized I had stopped enjoying all of this as I started worrying about rating too much.
I came to the conclusion that rating is just a rough number, and there isn't much point in obsessing over it. All I knew was, I enjoy solving problems on Codeforces, and I'm just going to continue to do that, without many expectations for rating. I acknowledged the fact that even if I can't do much about creativity, solving more problems will at least improve my analogy. And that is ultimately what I started doing in my 4th year of college, I started practicing problems just for the fun of it, and that's how I finally managed to become purple. And now I can say that even if you think you lack creativity, solving more problems will definitely improve your analogy skills, as you'll have a bigger pool of problems to relate to. In my last 3 contests where I was able to solve problem D (which I am usually unable to), I can definitely say that I was able to solve these because I could relate it to some other problems which I had upsolved earlier.
To summarize, as long as you enjoy solving problems here, keep doing it. Even if you think creativity is too hard to improve, your analogy can surely be honed, and that itself can get you quite far. Me becoming purple is the biggest indicator that it can be done using analogy, and since I've managed to do it, I don't see why anyone else can't given that they put in the right amount of effort with the right mindset.
Auto comment: topic has been updated by yellow_13 (previous revision, new revision, compare).
This division of skills into Memorization, Analogy and Creativity makes a lot of sense. Cool blog.
Nice blog. Downvoted
Nice comment. Downvoted
Bad comments. Upvoted
Bad Comment for Bad comments chain. Downvoted
downvoted in the flow
Please don't tell me that it is downvote-upvote chain.
long live the chain
Long live the downvoters, chain promoter downvoted
UP
Interesting
bUt bRo yoU aRe from IIT? what do you say to these people
To be honest I don't think that has a lot to do with competitive programming. JEE rank doesn't really have any role to play in terms of how well you do in CP, the most help you get from it in problem solving is just that maybe you have a bit more background in combinatorics. Other than that it just largely depends on how much you practice on codeforces.
Main sentence in this blog: I realized I had stopped enjoying all of this as I started worrying about rating too much.
thanks for this blog i think i needed this
aayush_chhabra I became fan of yours, bcz of your consistency. I'll try to be consistent as you are
How do you practice? Did you read editorials?
Most of my practice has just been through upsolving all contests regularly, although I think I should start practicing a bit more than just upsolving.And yeah I do read editorials when I'm stuck, a lot of times it's difficult for me to understand editorials though, so then I try reading the comments to see if someone has a simpler solution.
Nice journey tho, congratulations for being purple, orange and red are waiting for you and thanks for the great blog!
From a third-person perspective, I can truly state that the day you started solving problems for fun rather than just for a higher rating was a game changer. Great blog, Keep it up!
I'm still amazed at your initial pace of becoming an expert in just 4 months. Were you already quite good at CP when you started on Codeforces? Coz it's no joke, becoming an expert in this short time!
Btw, Thanks for good blog!
I won't say I was good at CP when I started codeforces, you can see that my rating did go down initially. I just had a little experience with Codechef long challenges. But yeah after giving like 2-3 contests on codeforces I started regular daily practice, learnt a lot of new things. I also feel that the time when I initially became an expert was sort of a lucky run for me as some of the problems were similar to stuff I had solved before in long challenges.
cool
Practicing more, but in the contest, performance is not much good. Suggest some good ways to practice.
i give myself rest a day per week,i am beginer is it bad or good habit?
seems like my expert journey is starting
I came to the conclusion that rating is just a rough number, and there isn't much point in obsessing over it. All I knew was, I enjoy solving problems on Codeforces, and I'm just going to continue to do that, without many expectations for rating.
Gets purple, proceeds to abandon cf
I had gotten pretty busy with college from mid February till now as I was nearing the end of my semester. I'm gonna be starting again soon.
Inspiring
You were right, I did it.