How to become Master.

Revision en5, by Marinush, 2022-05-07 00:08:50

I see a lot of newbies trying to get better at cp. But working hard isn't enough. You need to have a goal in mind and follow it till the end (like becoming X till Y). Here I am gonna give some tips on how to become master.

Participate in contests

For master you need rating. To get rating you have to participate in contests. Nothing more needed to be said.

Solve problems

To get a good place in a contest, you have to solve problems. So, obviously, try to solve as many problems as you can. You might say that me saying this is useless and idiotic, but I disagree! I see a lot of people that give up after solving a certain amount of problems, but don't be like those people. They will never achieve anything meaningful in life.

Have the correct mindset.

Competitive programming is just as much about programming as it is about having a good mindset. It's all about competing, so you have to be in the right state of mind. You might ask me what it is, but I can't tell you, since it's different for everyone. What works for me might not work for you and vice-versa. The main idea though is that you should be ready to dominate and destroy all relationships with your friends in order to beat them. There are no friends on the battlefield. Treat rating as the most important thing in the world and you will start getting more and more of it.

Move your body!

During a contest, you have to think and stay focused for a lot of time and it is very tiring to keep focus for such a long period. So, you should try to stand up and walk in your room for a while, go outside or even do gymnastics. What I usually do is I do $$$30$$$ push-ups every $$$30$$$ minutes. And after each AC, I go outside for $$$5$$$ minutes.

Love programming!

You have to love what you do and do what you love! Competitive programming isn't a job, you should enjoy it! If you don't enjoy it there is no point in doing it. I see a lot of people that do competitive programming to get job interviews, you should stop immediately! Only solve problems you find interesting, there is no need to torture yourself as life itself is hard enough, why make it worse?

Reflect on your progress in a journal.

Sometimes you might be down, because of a huge rating loss, for example how I lost 18 rating in Codeforces Round 778 (Div. 1 + Div. 2, based on Technocup 2022 Final Round). But, you shouldn't be sad. You made a lot of progress to get where you are! If you keep a journal of your progress it won't be only in your mind but will be out there in the world where you can't ever deny it. Reading it will make you feel way better as you will see how far you've come. It will also remind you of some algorithms you have learned along the way.

Start small

Solve an $$$800$$$ rating problem, if you can solve it without help then solve a $$$900$$$ rating one afterward. If you can solve it as well add $$$100$$$, else subtract 100. Repeat until you become Master.

Write every problem on paper.

After completing a problem, you should rewrite the code on paper. You might think that doing so is redundant, but the reason you are solving problems is to get better, don't forget. Writing something on paper takes time. That will help you to memorize and understand your solution better because you have more time to reflect on it. Sometimes I even start with writing the code on paper. This way I have to write the right code on first try.

Make friends.

It is important to have friends that keep you motivated. You should be inspired by them and try to destroy them in contests.

Grind.

Grinding is essential. You need to solve as many problems as you can, but don't lie to yourself, solving a harder problem is always better than solving a lot of easy problems. As a wise man once said, Quantity < Quality. I practice for around $$$10$$$ hours per day. I know it's not much, but I have school to attend and other responsibilities.

Relax.

You need to be rested. Practicing while tired is almost useless and competing is free rating loss and what idiot wants that? You need at least $$$8$$$ hours of sleep per night and don't forget to eat, as I do sometimes sadly...

Study Algorithms.

A lot of people say that algorithms on Codeforces are not that important nowadays, but I don't care! Algorithms are beautiful and you should study them! You should study, understand and appreciate them. Algorithms are like art and should be treated like it. I usually read algorithms when I relax as stated in the previous step.

Read books.

Reading improves your way of thinking. You relate to the characters of the given book and get inspiration from them. I often get my inspiration for solutions based on books I have read in the past. Lately, I have read [Ion](https://ro.wikipedia.org/wiki/Ion_(roman)) and used the greedy algorithm the protagonist used in the book and it was brilliant!

Learn minimum 3 DP optimizations.

DP optimizations make your mind think differently. They are essential to understanding the core of competitive programming and appreciating complex ideas. I recommend starting with Convex Hull Trick, as it is the easiest one. While you are at it, learn Li Chao Tree too, since it is pretty much the same thing but doesn't require the same monotonicity rules. Then go to something a little harder like Divide and Conquer and Alien's Trick. If you wanna get fancy, you may want to study Rudy's Trick (Rudy's trick is not a DP optimization but it is an interesting optimization worth noting). But it isn't very common.

Progress is impossible without change, and those who cannot change their minds cannot change anything

Marinush

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en6 English Marinush 2022-05-07 10:21:15 8 Tiny change: 'Ion_(roman)) and use' -> 'Ion_(roman\)) and use'
en5 English Marinush 2022-05-07 00:08:50 91
en4 English Marinush 2022-05-06 21:27:49 0 (published)
en3 English Marinush 2022-05-06 21:26:11 48 (saved to drafts)
en2 English Marinush 2022-05-06 20:59:02 5838 Tiny change: 'nything*\n\n*Marinus' -> 'nything*\n*Marinus' (published)
en1 English Marinush 2022-05-06 20:17:49 753 Initial revision (saved to drafts)