rulerofcakes's blog

By rulerofcakes, history, 30 hours ago, In English

Hi all, this is my first blog on codeforces. I've just reached Master(+2100) after spending about 4 years on codeforces, and I'd like to talk about what I like and regret about my past decisions regarding practicing for this milestone. I know plenty of GM+s have written such blogs, but I think many of you(like my past self) may find these unrelatable simply because of how good they were from the beginning / how much time they have spent / etc, so I decided to write one of my own humble version. Hopefully some of you may find this helpful for your own journey.

I honestly think it's possible to reach Master level proficiency in around 2 years, even if you're starting from scratch, assuming you practice hard enough with the right materials. This is based on my own experience. I say proficiency and not reaching the rating itself because I think having high codeforces rating may become even more meaningless in the near future with LLMs.

The Beginning

Like many of you all, I'm just another nobody trying to become good at competitive programming. I first got to know what competitive programming even is back in 2020 when I got into university, and I had no prior experiences with such problem solving websites like codeforces, nor did I participate in any sort of informatics olympiads / contests in my youth. I was terrible at math in high school, and I didn't receive any proper formal education regarding this subject, so I could say I studied mostly on my own for the past 4 years.

Because of my national background(south korea), I mostly did my practice solving problems in a korean online judge website, called Baekjoon Online Judge(BOJ). It is a phenomenal online judge with many good problems alongside an active community, but the website is also cluttered with relatively 'bad' or 'poorly structured' problems that can come with annoying input formats, unnecessary floating point arithmetic output problems, and many others that you may find simply annoying rather than challenging. My point is that I didn't really practice on a recommended/refined problemset that could be vouched for by better people.

Specialist

I did try tasting a bit of codeforces around mid-2021, and barely reached Specialist, which was after about a year and a half of practice on BOJ. And to my surprise, I could not properly reach Expert until mid-2023. I was doing the same thing over and over again, solving some random problems I hadn't solved on BOJ, often times upsolving unnecessarily hard problems way above my level for self satisfaction, and then failing to clear 3~4 problems on Div 2. I was often discouraged, put away codeforces for months at a time, only to come back at it again in hopes of the results being different this time. I eventually managed to 'brute-force' my way into Expert by doing the same inefficient routine(if you could even call it a routine) over and over again for 2 years.

Expert

However, things took a sharp turn to my growth in skills when I started to properly upsolve problems that I missed on those div 2 contests by looking at the editorials, and also took time participating in other competitive programming websites, such as AtCoder. The problems that are provided in AtCoder Beginner Contests are in very good quailty most of the time: concise introduction, straightforward solution, that lets you get used to the basic techniques that are required to break out of CF Div 2 1500~2000 rated problems. Now I was confidently keeping my Expert rating.

Candidate Master

Another breakthrough that got me to Candidate master(+1900) was participating in Gyms with proper editorials, and surprisingly, reading a book. Going through Book 1 of CPBook probably got me better so much faster than I would have done so on my own by brute-forcing through random problems/contests, but this is not a strict recommendation for cpbook alone. I'm fairly sure there are many other similar material out there that could be considered a 'book' with a well-structured curriculum, and I can definitely say that reading those as a beginner definitely helps way better than just throwing your head against the wall until the wall breaks. The book will only help you get a basic grasp of all the basic tools required to break the wall without bashing your head.

Master

Finally, once you get a grasp of such tools and reach CM, ironically it is now time to start bashing your tools(and your head!) at the wall again for harder problems, until it breaks. You don't need fancier tools, algorithms, data structures to advance to Master again. You shouldn't be spending too much time learning advanced techniques like CHT, Network Flow, Persistent Segment Tree, and so on. Rather, it is time to start brandishing your tools and ensure that you can confidently use your brainpower to utilize these existing tools to solve harder problems that once seemed impossible. Going back to contests that you participated in way earlier, and solving harder unsolved problems one good method of practicing this.

Finding your weaknesses

So what did I do wrong? I bashed my head against the wall for way too long without noticing that it was making no effect, and there were much more efficient routing that I was almost purposefully ignoring due to the amount of time I had already spent on brute-forcing. Yes, practicing makes you better and ultimately that is the one true advice that could apply for all programmers on this website, but time is a limited resource. I'd recommend everyone else to try to spend more time looking back at what kind of progress you're making with your own current practicing/learning methods if you feel like you're stuck around some rating for too long, and try out what others are doing. Maybe AtCoder contests fit you better than CF. Maybe you're extremely weak around combinatorics problems, but you're purposefully ignoring them during practicing due to them being unfun for you(this was literally me for 2 years).

Takeaway

In summary, this is my takeaway on my own 4 years spent on codeforces and my advices to others that may wish to also reach Master:

  1. If you're a beginner, try to find a well-structured curriculum(whether it is a book, an online article, lecture, whatever) and stick to it until you reach Expert. Unlike older times, there are plenty of good supplementary materials online that will boost your journey.
  2. Please look at the editorial and try to solve at least 1 extra problem that you were unable to solve during the contest. Sometimes the editorial may be unintelligible. Try to ask for help around the community or look at others' code. It is also important to don't go too far in this editorial-solving process: solving 2 more problems is a bit stretching, and 3 more will probably be way above your skill level. If you feel like you're no longer understanding the solving process of a problem and is merely copy-pasting the editorial, it's a signal that you're not skilled enough for that problem. Come back to it later, or simply ignore it for now.
  3. It is natural to have 'stuck' periods where your average rating is simply not increasing for months: however it is also a good opportunity to reflect on your practice routine and skillset to see what you're weak at, and what may suit you better to overcome these weaknesses.
  4. Don't spend too much time on problems/skills that are way above your own level. Being able to solve Network Flow problems with Dinic's algorithm will not help you at all if you're still stuck around Expert in Div2. Exploring them is fine, but the learning process for such harder algorithms is way faster when you're actually skilled enough to tackle such problems in actual contests.

Now I'm back on my own journey again to reach IM. I wish you all great luck on your own journey, and maybe I will come back to this blog once I reach GM some day. Lastly, rating is temporary, but your skills will stick with you forever: please don't get too discouraged by cheaters or LLMs. GL HF.

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

»
30 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by rulerofcakes (previous revision, new revision, compare).

»
30 hours ago, # |
  Vote: I like it -116 Vote: I do not like it

4 years to be a Master, i don't think it's a motivational blog

  • »
    »
    30 hours ago, # ^ |
      Vote: I like it +69 Vote: I do not like it

    I'm not exactly a talented person, rather I would consider myself the opposite, so it took me much longer than others to reach the same milestone. The point of the blog is that you don't need to be discouraged by your halting/slow progress: it surely took me a huge amount of time, but there were huge inefficiencies as described that I either refused to acknowledge, or was totally blind towards during my progress. You could do better.

»
30 hours ago, # |
Rev. 2   Vote: I like it +8 Vote: I do not like it

Master is easy. rulerofcakes when?

»
29 hours ago, # |
Rev. 2   Vote: I like it +8 Vote: I do not like it

congratulations on the master

»
27 hours ago, # |
  Vote: I like it +3 Vote: I do not like it

Thank you for writing this blog and showing that there is light at the end of the tunnel

»
27 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

I am quite serious from Jan 2025 to improve. I am not able to solve B in Div 2. Any suggestion would be really helpful!

  • »
    »
    27 hours ago, # ^ |
      Vote: I like it +2 Vote: I do not like it

    IMO, problems up to Div 2 C are mostly solved by what you may consider as 'standard approaches', which are like well known approach methods to problems that would probably be described in every algorithms/competitive programming books.

    1. If you're having problems solving them at all(disregarding the time limit of the contest), you should read such basic introductory materials to competitive programming/algorithms/data structures first, and get used to solving the most basic form of problems for DP, Greedy, etc. If you're currently enrolled in a computer science program, the lecture material for the algorithms/ds course should be enough for this. If not, you can refer to online materials such as usaco guide or cpbook as I had mentioned above. Of course, there are plenty of others which I cannot list them all here.

    2. If you're having problems solving them in time, that would mean you are simply not familiar enough with implementing the learned techniques above into code. In this case, just pure practice would be the answer. Search for similar-rated problems with the same category that you are trying to become good at, but do this after you have learned the technique first. You can do this both inside and outside of codeforces, perhaps on other online judges such as kattis.

    I wish you the best of luck!

»
27 hours ago, # |
  Vote: I like it +9 Vote: I do not like it

great blog man, reach IM sooner glhf more strength to you

»
25 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

One of the few blogs mentioned about practice somewhere else. Maybe this is a little push that I need to actually step out of CF and try out other options (AtCoder, Topcoder archive...).

I've been banging my head against the wall too, even my rating starting to steadily climbing up... But in my perspective, it's no where good. (One might actually say, I hardstuck pupils rank).

Time to explore things out there, out of my comfort zone.

»
21 hour(s) ago, # |
  Vote: I like it 0 Vote: I do not like it

Such a great blog! Thanks for all the informative things you shared, and good luck in reaching IM

»
21 hour(s) ago, # |
  Vote: I like it 0 Vote: I do not like it

Thanks for guidance.

»
19 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Congrats rulerofcakes

»
14 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Congratulations on becoming a master and thank you for the insightful blog post!

»
13 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Beautiful Blog , dispelled all the unspoken doubts we all have. Best of luck for the future.

»
10 hours ago, # |
  Vote: I like it 0 Vote: I do not like it

Thanks for the nice honest blog

»
65 minutes ago, # |
  Vote: I like it 0 Vote: I do not like it

Have you tried participating in virtual contests? I haven't participated in a lot of VCs yet, I think just about 10. But I've already found them quite motivating especially when you can compare your performance with the friend list. It seems good as a speed training. Later you can upsolve the last unsolved problem too.

»
49 minutes ago, # |
  Vote: I like it +1 Vote: I do not like it

Amazing journey , Sir ! Big respect for your hard work and dedication . Thanks for sharing!