NemanjaSo2005's blog

By NemanjaSo2005, 8 hours ago, In English

Hello, codeforces community,

After the last round of 2024, Good Bye 2024: 2025 is NEAR, I finally reached Grandmaster (GM)—an achievement I had dreamed of ever since I became a Master 2 years ago, but doubted I could achieve. In Spring 2024 I set myself a goal to reach GM before the end of 2024, which felt ambitious and even unrealistic at times. But here I am, thrilled to share that I have accomplished my goal!

Some of you have noticed that upon reaching 2400 rating I used magic to change my rank to CM. Why? For two reasons: first, I quite like the CM color. Perhaps it is because CM seemed like such a cool rank when I started. Second, I wanted to give myself more time to write this blog, so I hope you will enjoy it!

While some of you might know me, I assume most are seeing my name for the first time. Allow me to introduce myself briefly. I am a 19-year-old Serbian competitive programmer who has been doing CP for around 8 years now. My journey is filled with many highs and lows — many great victories, disappointing defeats, valuable lessons, and most importantly, many friendships.

My story summarized

This is just a summary of my journey, as the full story could be its own blog. If you'd like to hear the detailed version, let me know and I would be happy to share it in a future post!

I have loved math for as long as I can remember, and I participated in math contests as soon as I was old enough. Then my mom introduced me to programming and encouraged me to participate in school programming contests. They were quite similar to math ones, so I was interested in trying. I was quite successful, making it to the national contest, but sadly I was unable to get a medal there.

Then I discovered that odule was hosting free programming sections in our local HS. They were for HS students, but primary school students interested in programming are also welcome. I attended regularly, and my results reflected my efforts. I also attended some Serbian preparation camps for students and learned there too.

I liked the sections so much that I enrolled in the previously mentioned high school and I had a great time there. I had a great group of friends and excellent teachers. I was able to improve my skills not only in programming but in maths and physics as well. I will also give special mention to gubica who was my classmate and is a great friend of mine. We often did problems together in class and he encouraged me to practice and compete. During high school, I got an IOI Silver medal and became an International master on codeforces.

After graduating from high school in June 2024 I have since enrolled in college. I continued doing CP, though my ambitions of reaching GM were lower as I felt I was not good enough yet. Then my friend TimDee reached GM, and that pushed me to try and reach GM myself. I started giving contests and was surprised that I had quite a good performance (I expected to lose IM rank). A friendly rivalry between you and a friend is one of the best motivations :)

Some tips related to Competitive Programming

Firstly, I will note that just because some practice method worked for me, it doesn't mean it will work for you, or in general. There's survivor's bias when reading such blogs, so you shall find a method that works for you, and not just blindly follow someone else's.

There are many discussions and blogs on how to practice and I will try not to write the same stuff again. You can find them in codeforces catalog. I will try to give some points that are either important or not that well discussed.

  1. Competitive Programming is fun! Like many other high-rated programmers, I do competitive programming mainly for fun. It is kind of a hobby for me. So, I do not have a strict schedule or anything. That is probably the most important reason why I became red, I enjoy what I am doing, and it is well known that you are more likely to learn something you enjoy. (There were many times when I wanted to do something "productive", but instead of studying for my exams, I would do competitive programming).

  2. Learn from mistakes! If you have done programming for some time, you surely have made some mistakes that resulted in you spending a lot more time on a problem or doing a contest poorly. It can be a bug in your code, the wrong approach to the problem, or even a wrong contest strategy. One thing is for certain, if you made it once and do nothing about it, you will make it again. So what I did was make a list of mistakes, and whenever I made some significant mistake, I added it to the list. Before each contest, I reviewed the list to keep those mistakes fresh in my mind. Note that I usually put mistakes that waste a lot of time. For example, if I just forgot ';' on some line, I will not put it there. Think of it as something similar to this list.

  3. Do not be afraid of mind-solving! The advantage of competitive math to competitive programming is that all you need to solve the problem is pen and paper, or you can even mind-solve. In competitive programming, however, you need to code your solution and for that, you need a computer. So it makes perfect sense that while you are at for example a school break, you will not be able to do competitive programming. So... why wouldn't you just mind-solve problems whenever you have time and use your phone to read statements and code them when you find time for coding? I made another list where whenever I mind-solve a problem, I put it there to code it later. Make sure to code it later, because it is often that you miss some stuff in mind-solve, and that way you are also practicing your implementation skills.

  4. Codeforces is not the only online judge! Where do I practice from? People often see my profile, see 800 problems, and then message me something like "How did you get GM with only so few problems." Well, the reason is quite simple, I do not do just CF. I also did previous OI contests, ICPC style contests, national contests, CodeChef problems, math problems (yes, they help, especially combinatorics), and so on. Also, if you take a look at what I did on codeforces recently, you can see that it is mostly 2300-2700 rated problems.

  5. Everything is better with friends! Even if you do not have many competitive programmers around you, there are many online competitive programming communities. I recommend joining them as practicing with friends is much more fun than doing it alone. You can also motivate each other to practice! Also, do not be afraid to sometimes just mess around in programming, like racing with friends who can solve more 800 rated problems in an hour. Additionally, more experienced programmers can give you hints that guide you in the right direction, and usually best thing while stuck is to get a hint from someone who knows how to solve a problem and also knows where you are stuck. Additionally, finding friends online is especially recommended if you are planning to participate in contests such as IOI/ICPC, as then you will likely meet those people in person. You are likely to not only learn from them but also have a great time chatting with them.

  6. I did not start with codeforces. When you are just starting and do not even know ifs and for loops, codeforces is quite hard. Even 800-rated problems require those. That is why I recommend using another site to get familiarized with the basics of programming. I used Petlja and I feel like it is good for getting started with programming and then switching to something else when you learn the basics. Sadly, it is only available in Serbian.

Do I need x to reach GM?

It is often discussed on Codeforces how some people just tend to learn algorithms and data structures instead of practicing. I think that if something sounds interesting to you, or you encounter it in a problem, feel free to learn it. However, try to solve some problems with it and some where it cannot be used, to get a rough idea of its use case. Otherwise, it will only be useful to you if you get a problem that is just the thing you learned. However, problems nowadays are usually such that most of the problem difficulty comes from the core ideas of the problem, not from knowing some crazy algorithm.

I do not spend a lot of time learning algorithms and learn them only if I come across a problem involving them, or come across an interesting blog about them. For example, I got a Silver medal in the Serbian Informatics Olympiad and didn't know DSU as I thought it was complicated and never learned it. I looked it up a few months later and immediately realized how simple it is. I will note that it would not have been simple for me had I not done many problems up to that point. However, not knowing common topics did backfire on me at EJOI 2019, where there was a trivial Dijkstra problem I didn't manage to solve, but solved immediately after my teammates told me Dijkstra's algorithm is a thing. That is why when I was trying to make Informatics Olympiads I learned most of the IOI syllabus because "A standard problem from a hard topic may appear".

Programming sections in Sombor's grammar school

One of the things that helped me the most in my competitive programming journey are the Programming sections odule hosts in Sombor's high school, so I feel like I shall dedicate a paragraph just for them. These sections were highly effective, benefiting not only me but many others from Sombor. I hope you find some of these practices useful.

Dule is a teacher at Sombor's grammar school and he teaches competitive programming (yes, that is a subject). Usually a few times a week, Dule would stay in school after classes and host a programming section for students. Mostly people from the school come there to prepare for exams, competitions or just to learn programming. However, from time to time there would come some primary school students (I am such an example). The sections are completely free to attend (you only need to have the motivation and willingness to do programming).

Now, you might think that it is mostly you listening to him giving lectures or something, but it is not. You come (at any time he is there), go to an empty computer, open problems, and solve them. You might get stuck on some problem for quite a while, and in that case, you would call him to help you. He usually provides hints or even the full solution. He might as well teach you a new technique if he sees you need it to solve the problem. It is also common for more experienced students to help less experienced ones.

We are also encouraged to think for ourselves and not constantly ask for help. Therefore it was not uncommon for me to not ask for help at all. However, he would still periodically check on what I was doing and help me if needed.

And that system is effective! Because you solve problems on your own and actively think about them. However, if you are stuck on something, you will get a hint that will give you enough to continue, but not too much. It will be just the right hint. He also helps with implementation and gives you tips on how to improve it, which is not as discussed on online forums. Another advantage of such a system is that you are programming in school. That means you are much less likely to be distracted by your phone or think about random YouTube videos you watched and more likely to focus on problem-solving. Additionally, you have students around you who are also practicing, making the environment even more encouraging.

And probably most importantly, when you are starting, you have no idea how to start or what to learn, and doing it by yourself is quite challenging. Therefore he helps in guiding you so that you learn as much as possible.

All of that made for a great environment that helped not only me but also many other students!

Conclusion

Those are some of the key points I wanted to inform you about from my journey! Just because I have reached GM and graduated from high school does not mean my journey is over. I still enjoy competitive programming! My dream is to one day make ICPC world finals and maybe even become an International Grandmaster!

Thank you for reading! I hope you found my story and tips interesting and maybe even useful. If you have any questions, thoughts, or experiences to share—or even just want to congratulate me—please feel free to drop a comment. I will happily respond to your messages!

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

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

Wtf Strong, I just hope I reach CM in 2025

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

    Thanks. You're also strong and you will reach CM in 2025!

»
8 hours ago, # |
  Vote: I like it +17 Vote: I do not like it

NemanjaSo2005 orz congratulations!

»
8 hours ago, # |
  Vote: I like it +35 Vote: I do not like it

Orz NemanjaSo2005! One of the most dedicated competitive programmers I've met, and a hardworking tester and problemsetter. It's great to see you red :)

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

    Thank you very much!

    I can say the same thing about you; you are one of the biggest CP legends I know. Also, I am certain we will get a sequel to your blog in 2025!

»
8 hours ago, # |
  Vote: I like it +17 Vote: I do not like it
»
8 hours ago, # |
  Vote: I like it +16 Vote: I do not like it

congratulations man

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

congrats.

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

orz, LGM when?

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

orz for reaching GM.

Hope I can also reach pupil in the next 1/2 contests

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

Congrats NemanjaSo2005. Top effort!

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

Congratulations to you so much! I hope you reach IGM soon!

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

why you did that now? not after the contest?

what's your math background ?

why black PP?

what's the most adv algo-ds you learnt ?

aren't ~800 problems too little for a gm ? orz