[Tips; personal stuff] I got red rank. Here's some stuff I learned

Revision en3, by The-Winner, 2025-11-23 22:37:36

Hello everyone!

This blog will be a collection of ideas, thoughts and personal experiences I gathered over the past ~7 years (darn, I am old). It might not contribute much to the world so feel free to skip it, but I do believe most people can get something interesting out of it. I waited on writing this until my opinion was actually worth something (still, take the following with a grain of salt or two). It is be a big wall of text (you have been warned). Sorry for taking a week to post this, University is crazy at times. Tips (and some personal experience) for problems solving (can probably extend to whatever else it is you want to do):

  • The most important thing: Have fun. If you don't have fun doing whatever it is you are doing, you are motivated by an external factor, that when removed from the equation will remove you from the action. Without a reason to come back, you will not, and the whole experience will slowly fade away (congrats, you wasted your time). I actually stopped doing computer science a couple of times because of outside reasons. I only retook it because I find it fun.
  • Solve challenging/hard problems. If you don't, you'll stay stuck at your current level or even drop. It is challenges that push you forward, and the enjoyment of completing them that pushes you to work on them.
  • Take the two previous points and merge them together. You need them both to succeed. If you only find easy problems to be fun, you'll eventually lose the ability of solving hard ones and then the easy ones too. If you only do hard problems but you don't like solving them then you'll forget what you learned in them soon after. If they both miss, you don't need me to tell you that you are wasting your time.
  • Don't act smart, you'll look dumb. Be modest and humble and understand that there are aspects you can and should improve upon, instead of fake-ing your superiority over others. This happened to me a lot, especially in high school and I'd wish 10'th grade me in particular could have read and understand this point instead of thinking he is unstoppable when he thought that dynamic programming is only applicable on the four example problems his teacher gave him and some small variations. I still fall for this (I am writing this blog after all) but when starting university and meeting much smarter people I realised just how much I was behind and had to learn.
  • Don't take in too much at once. Mastering a concept requires both time and effort. Skipping one (or both) leads to mediocre results at best.
  • When learning a new concept, don't just learn theory/practice problems. The two should go hand in hand in an alternating fashion. This is very well exemplified in the Edu section here on Codeforces. First there is some theory, then there is some practice, then there is some more theory, then some more practice, ... . If you skip practice, you might know the concept well enough to solve the first problem where you require it, but it will take a lot longer to implement and you will lose precious time. If you only know how to implement something but don't know the theory behind that, you will never be able to use that code.
  • Pen and paper are your best friends. Thinking about every little detail is very hard sometimes. Your brain is like the Cache and paper is like the RAM. It is slower to read and write, but allows for much more storage.
  • Don't try to desperately increase in rating. Try to gain knowledge and increase in strength. Rating is just a number that quantifies how well you did the last few contests. It is knowledge, strength and luck that dictate how well you do in contests. Even if you are having a rough few days/week, luck will eventually be on your side too. If that does not happen, it might not be luck's fault (see no. 4).
  • "Those afraid of failing are afraid of learning from their mistakes" (Sun Tzu said that maybe). Instead, you should turn mistakes into experience and avoid them next time.
  • When reading a problem statement/editorial/source code, don't assume you will get it just by looking at it. Take your time, split it into small chunks and make sure you understand each chunk before moving to the next. It is very rare that you'll need to understand something further down before you need to understand the beginning.
  • Don't be afraid to help others in need. If you cannot, it is likely that you also don't know what you're talking about (see point 4). Thus you also learn that you can and should learn that concept that you cannot explain.
  • Examples help. Use them. Don't use very simple ones and don't use very complex ones.
  • There are a lot of "classic" problems. By that I mean problems with very standard solutions, that sometimes appear as sub-problems to harder ones (e.g. Using Minimum Spanning Tree and Minimum General Matching to get a $$$\frac{3}{2}$$$-approximation for Traveling Salesman Problem).
  • Most of the things you'll learn (/have learned) in your life will be useful to you at least in one day. Try to remember them as they might make a pleasant difference that day.
  • Don't try to solve incredibly hard/extremely easy problems. You'll learn almost nothing from easy problems. From very hard problems you'll learn very niche things/techniques that might not help at your current level. I knew that the solution of The Classic Problem is to use a persistent segment tree a few years ago. But I did not know what a persistent segment tree is or why we would use that in Dijkstra's algorithm. When it finally clicked for me, without checking out the editorial, I finally understood and that thing is not leaving my brain ever again.
  • Have hobbies. Doing something for too long will lead to fatigue and misery. I recommend having other things to clear your mind from too many problems. I sometimes draw (I am terrible, but I like being creative).

The following few are more personal opinion, but I still wanted to put them here:

  • Don't use "Artificial Intelligence". It will not help you. In the long run you'll get used to asking for help non stop. In the short run, you probably gained 5 minutes you can waste getting your brain rotten. There is a reason you are forced to write a 300 word essay or solve a problem your teacher gave to you. Even outsourcing the search of the information can lead to you becoming more vulnerable to misinformation and fake news. It is just a very bad idea.
  • I don't like to listen to music. Some people can't stand not having their ears blasted every second by some music or "noise". I can't focus when I hear music and then it gets stuck in my mind for hours to days. I prefer peace and quiet.
  • I like to spend commute time (bus/metro/walking) thinking about problems. Recently (a month and a half ago), while on the bus I solved problem D from Meta Hacker Cup 2025 practice round (great problem by the way). Commute time is dead time I can use doing something fun like that.
  • Stop it with the alternate accounts. What do you gain from that? Satisfaction that you managed to get an extra account to the same level as the first? Why would that even be an achievement?
  • Stop it with the cheating. Again, what do you gain from that? Cheating makes you dumber by outsourcing the thinking you do to someone/something else. When you'll need to think, guess what, you won't be able to.
  • Stop it with the hour long queue outside of contests. Someone really needs to do something about the number of bots plaguing the site and Cloudflare does not seem to be doing any good (although this might just be our impression from how well it works and little we actually see from it apart from longer login screens and random interrupts during contests).
  • OEIS problems are not very fun (apart from April Fools contests).
  • April Fools contests are fun.
  • Ratism is partly understandable (when the only thing you see in Recent actions is "Help very hard problem" that is just a "simulate the process in the statement" and "Help debug solution" with no explanation of the code/problem/approach/logic and not even code formatting you get to a point where you just don't want to help newbies anymore). I am aware that it is not a healthy thing, but at some point newbies have to learn on their own. (I am generalising and specifying for clarity. Don't get offended for no reason)
  • Sometimes I stumble upon code I wrote 5-6 years ago. I learned a lot since then.

Up next some books/courses/sites that helped me learn stuff:

Well, that was a lot. Sorry for the long blog, but I did not want to make multiple ones and crowd the Recent actions section. Hope you found somthing interesting/informative/educative.

Tags tips

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en3 English The-Winner 2025-11-23 22:37:36 19 (published)
en2 English The-Winner 2025-11-23 22:35:24 1092
en1 English The-Winner 2025-11-23 22:20:27 9911 Initial revision (saved to drafts)