Hello Codeforces! I did it! My main goal for 2022 was to reach red, and I succeeded in the last contest of the year by getting +1 delta and going from cursed 2399 to 2400! I was very happy but scared to celebrate because I was worried that my rating would go down to 2399 again after the cheater removal. But now it’s 2401, so I think I’m safe now.
Oh, wait… You don’t even know me, so why should you keep reading this blog post? Let me introduce myself a little first. I’m a high schooler from a small European country where few people do Codeforces. I have always loved competing in MO and OI. Then one day, my father found the Codeforces website and suggested that I should start practicing there. At first, I was very confused. I quickly managed to get AC on Watermelon and some other 800 problems since I was doing OI before, but something was bugging me. People on blog posts had nice colors, and I couldn’t figure out how to get one. I didn’t realize I was supposed to do contests. XD. So after a while, I quit the website. Worst decision ever.
Luckily after a year or so, my friends told me how to do contests. Then I did my first contest. It was one of the most exciting memories I have. And then I did it again and again. Sometimes I didn’t do them for a long time because I was scared or because I didn’t have the motivation. But no matter how long I was gone, I always came back again and did more contests. The exciting feeling was still there. At the beginning of 2022, I made a resolution. I wanted to reach red before 2023. A few months ago, I gave up on it and decided to focus on MO instead because I didn’t have many friends who’d encourage me to do CF. But I didn’t give up, and it paid off! Now I have more motivation than ever to continue doing CP this year together with my CP friends, whom I now found thanks to competitions like IOI. My next goal is IGM; let’s see whether I can do it!
Back to the present. So, soon after the goodbye round, I got a DM recently asking me how I became red. There isn’t a correct answer to this question; different ways work for different people. But I will do my best now and talk a little about what helped me and what did not.
My observations about the training process:
I am a slow learner, and I can’t remember and learn algorithms as well as my friends do. I can’t even implement SCC on my own! But that doesn’t matter; Codeforces nowadays doesn’t require almost any advanced algorithms in <3000 rated problems. It might sound surprising to some beginners, but knowing BFS, DFS, union-find, Dijkstra, MST, hashing, inverse elements, euclidean algorithm, fast nCk calculation algorithm, and segment trees are enough to reach red! So, learning advanced algorithms won’t help much when trying to reach red. Fundamental problem-solving skills are way more important.
When practicing, always pick problems hard enough to challenge you but easy enough, so you have a chance to solve them without editorial. This was my mistake for a long time; I kept picking easy problems because of the satisfaction of getting AC. Then I realized the hard way (finishing almost last at OI tsts) that I won’t improve this way. So what did I do? I started picking challenging problems and instantly read the editorials for each of them. Now, this wasn’t all bad; I learned a few advanced problem-solving techniques like this, which helped me better understand and implement complicated ideas. Still, honestly, I was wasting time practicing inefficiently. So right now, I try to pick myself challenging problems (in the range around CF 2500-2800, but that’s not very important) such that I need to think about them for a few hours until I figure out the solution. I almost always do them on my own without reading editorials. And this is the part of CP I like most. There’s nothing as satisfying as finally figuring out a solution to a hard problem you couldn’t solve for hours and then getting AC.
Always implement the problem after reading the editorial/solving it, don’t just settle for “mind solving” it. Implementation is an essential part of competitive programming and shouldn’t be underestimated.
It is crucial to build intuition about problem-solving. I am not done with the problem when I get AC while practicing. I always think about it. How did I solve it? Did I learn something new? What part of the problem was most problematic for me? Is there anything I could learn for the future from this problem? I have a diary where I write down answers to such questions after solving every problem. I started doing this only recently, but I think it helped me build better problem-solving intuition.
Have fun when practicing! Don’t take CP or rating too seriously. Find a way of practicing you can enjoy. Compete with friends, challenge each other, and discuss problems. I underestimated this a lot in my early years. But it is perhaps the most crucial aspect of training.
My observations about the contests:
Always stay calm during the contest. Focus on solving the following problem and nothing else. Don’t think about how much rating you will win or lose, don’t think about beating a friend. For now, there’s only the next problem ahead of you, which you must solve. When you solve it, you win. You can do it. And even if you fail to solve it, you will learn something and fix your rating soon.
Only start implementing after you are 100% sure you know how to solve the problem or there’s little time left. Otherwise, you might lose precious time implementing something wrong or get many wrong answers.
Check the dashboard every 15 minutes or so to see the solved counts and get an idea of how hard the following problems are.
When you get WA/TLE/RE and don’t know why, reread your code. Check the constraints in the problem. Try to run it on a few small test cases, which you can find an answer to using hand. Try to run it on the max test case on CF custom invocation. Tip: Use Clang++20 to check for overflows/out-of-bound issues and stuff. If you still don’t know what to do, stress test. It’s easy if you practice it a lot. It can take less than 20 minutes even.
Never quit the contest too early. Always at least read and attempt the following problem. There’s always a chance for you to solve it.
Soo, that’s it. Thank you, Codeforces, for making my ordinary days so exciting. Thank you everyone who encouraged me along the way. And thank you, reader, if you actually read this whole thing. You can also reach red. It might take years, but I believe anyone can do it if they work hard enough and enjoy CP as much as I do.