Hey guys, this is Shan and in this video I'm going to talk about the common mistakes that people make in learning competitive [Music] programming. These mistakes can completely ruin your efforts. So if you're thinking why I'm trying too hard but I'm not progressing and I'm not getting the rating that I want, you should watch this video to see if you are making any of these mistakes.
Without any further ado, let's jump into them. First solving random problems. Sometimes I see people that they don't know what problems to solve, how to find good problems and they just solve random problems from code sources.
That works at the beginning when you're a newbie, when you are a pupil. That works because as I said, you can just source the problems by their difficulty and start solving them. But as you grow and your rating goes higher, you should start to learn finding good problems.
There are many ways to find good problems but the most important way is to use a feature in code forces. This feature is called list. This feature helps you a lot because it helps you to find out which problems are solved by important people.
So basically the idea is you can create a list of important people that you admire and it writes in front of each problem that how many people in that list have solved that problem and basically you can say that if a problem is solved by so many of those people it means that that problem was a good problem and it's worth solving and this approach almost always works. You can add the best competitive programmers in the world. You can add your rivals.
You can add the people that you know and you admire and you can see that how many of them have solved each of the problems and really with high probability those problems that are solved by so many of these people are really good problem. So if you open code forces and come to your profile you can click here in the list section and click on create new list then you can choose a name for your list. Let's just name it a sample list.
And then you can start adding people to your list. Let's see the highest on the competitive programmers and let's just add them. For example, we should add let's say Jangi tourist [Music] and then you can create a list with these names.
You add all of these people to your list and you see that they're all here. Now you can sort them by the rating or anything. And it's not necessarily the height of competitive programmers.
You can choose any person. Let's go to the problem sets and in status and just see the last person who have solved the problem. I'm adding this person.
You can also add this person for example. And then if you open problem sets in here, if you click on these parts, you can see your lists. If I click on this sample list, you can now see that it's written in front of each problem that how many people of that list have solved that specific problem.
You can see all of this and then if you for example look for some rating of the problems you can search for problems of rating for example 1500 then you can see that for each of these problems how many of these people in the list have solved that problem if you just choose this list for example I see that this problem is solved by seven of them this problem has been solved by 10 of them and so on this problem has been solved by two of them and so on but I highly highly recommend to you to add more people in this list. For example, add 40 to 50 people. Especially add your rivals.
For example, when I was studying for Iran National Olympia in Informatics, I was adding all the people that were my rivals in this list. So that I know that which problems they have solved and I was almost sure that if so many of them have solved that problem, there should be something with that problem. Maybe their teacher has gave them this problem or something.
Basically, I was sure that this problem was a good problem. So, don't just solve random problems. Try to find good problems.
And using lists helps you a lot. Even right now that I'm a teacher, when I want to choose good problem for people, problems that I haven't even seen myself before, I will use this feature and I find the problems that so many of these people have solved and I open them and I see that there are very beautiful problems and very educative problems. So, make sure to use this feature.
Before we dive into the second part, let me introduce you to our sponsor, yourware, a platform that's revolutionizing web development with AI. You know that feeling when you write a good front-end code, but getting it online and making it look good becomes a whole new challenge. That's exactly what your solves.
The most exciting thing about yourware is that you can create the entire project simply using natural language prompts with their AI models like the powerful sonet 307 and soon chatb 401. So for instance I can come here in Yware and I can just say that create a newsletter platform for me with some random news. One of the news must be Shyan has released his new video.
Let's see how it works. Okay, our website is ready. We have this news, new discovery, new study discovers benefits of drinking water.
And Sean has released his new video. That's interesting. I can also change the design.
For example, I can say that change the theme to let's say dark [Music] red. And you see that the team is changed to a random color that I just set. This is honestly something that I myself am super excited about.
Also, yourware has three powerful features. One of them is one-click deployment. So, simply you upload your front-end code and with one click, you have everything set up and your website goes live.
No server setup, no hosting configuration, just one click to your live URL. The second one is AI powered design enhancement. Using their cuttingedge boost feature with Sonet 307, you can instantly transform your basic interface to a professionally designed web page.
And the third one is communitydriven innovation. You can browse through a gallery of inspiring projects by other developers. And with remix feature, you can make your own changes to their project to match your own needs.
So basically, it's like you take another person's project and change it as you like. Your word is basically like the Instagram of programmers. And you know what's the best about their platform?
The fact that it's completely free. Thank you your word for sponsoring this video. Second, learning it like it's chemistry.
I sometimes see people who are treating competitive programming like it's chemistry. They're looking for books. They're trying to just read the different algorithms.
Well, that sucks. This is not what you should do. Competitive programming is a skill that will be built over practicing a lot.
As I said a million times before, you should not start go searching for algorithms and just reading them, memorizing them, see what they are. Learning algorithms, it's not that important. The ability, the skill to solve so many problems is what is important.
So if you see people who know a lot of algorithms, they have memorized it, it doesn't mean that they are strong. They just know a lot of algorithms. If you tell them to write this algorithm, they can write it for you completely.
But they cannot solve a problem with the simplest algorithms. That's never good. I have taught in so many schools and I saw that these people are still newbies or pupils after a year or two of studying and having classes and then I start working with these students and over the course of three or four month they become experts.
This is something that has happened over and over again. And if you ask me what is the reason what I did differently to their previous teacher. The point is that I understand that the previous teacher was teaching them AVL3.
So the students knew the hardest algorithms but they didn't know how to solve problems in a contest to get out of pupil. That's the most stupid way to learn competitive programmings. And if you do that you can see that all your efforts don't go anywhere.
Initially just try to solve 100 to 200 problems. You don't even need to learn any algorithm. Just know some basic C++ like how to see out hello world or how to add up two numbers and then start solving 100 to 200 problems with difficulty 800 or something with minimum difficulty.
I have said it so many times before so I don't want to repeat it once again. Make sure to watch my other videos that I made about this especially the videos about what not to do to get out of newbie and also how to get from newbie to expert in 3 months where I told you about my own journey. So never forget that competitive programming is not about knowing what algorithms are is about your skill to solve problems.
Three overthinking about rating. So many times I see people who are obsessed with ratings. I even sometimes see people nag about cheaters that these people cheated and that resulted that we lost some rating and the difference is like five scores in the rating.
This obsession with rating can really harm you even though the rating is important and you should care about it and it is some motivation for you as well. It helps you to practice better and have some motivation to grow. But overthinking about it and obsession with it can really harm you at the end of the day.
It's not really important that what your current rating is. If your level is higher, sooner or later you will reach that rating. I strongly recommend to you to do your own work.
Don't be obsessed like oh my god why my rating got lower and stuff like that. Instead just focus on your training. Focus on your inputs not on the outputs.
Your input is how much you try, how much you put efforts etc. The output is the rating you get. You have no control over the outputs.
You have to focus on your input. Plan for your input. For example, plan that for the next month I will spend this much on training.
Don't plan like okay after this month my rating will be here. You don't have any control over that. Focus on your input.
Care about your rating. That's important and that's very fun and competitive as well. But don't be obsessed with it.
Also another very bad mistake that I see from people is that they sometimes don't participate in code versus contest because they don't want to lose rating or even at the beginning they don't have the courage to start participating in contests. That's again where obsession with rating is harming you. Make sure to participate in all the CF contests that you can.
Don't miss even a single contest as long as you can. I have to include this part of interview from Kavi here again because it's very important and it's saying that what difference you did compared to others such that you believe that it had significant effects on your improvements. I always trying to never miss a contest in code for never miss a contest.
I didn't miss any single contest in years 2018 and 2019. Wow. Why?
How? because I really enjoy it. Do you miss a date with your love?
No. No. So, participating in contest is super important for you guys.
Don't be scared of that. At any stage that you are, even if you had just started and you have accepted only 10 problems, I still recommend to you to participate in contest. At the end, you want to secure a job or you want to perform well in IUI or ICPC.
So your skills are important. What you learn from this contest are more important than your rating. So don't be obsessed.
Four, isolating yourself. Another mistake that I see that people make is to isolate themsel from all the other people who are learning CP. That's really bad.
Let me start with a story from myself. When I was in high school and learn started learning competitive programming, I had a bet with one of my friends that in around a month I will have 100 accepts on code voices maybe a little bit more or less but it was around that. He was like no you can't do this and I was like yes I will for sure do that and we had this bet.
I calculated that I need around four accepts per day in order to make sure that I get that many accepts. And you know this additional motivation helped me a lot and it made everything a lot more fun. The result was that I was solving a lot more than four problems a day.
I was solving like 8 9 10 problems every day and my rating also started to grow a lot. As I also said this in my video about how to get from newbie to expert in 3 months. So my main point is if you isolate yourself from other people who are learning competitive programming, it can get more dull for you to learn competitive programming while interacting with others who are doing the same thing can make everything fun.
So make sure that you engage with others. If you have some other people in your school, in your university or people around you who are doing the same thing interaction with them is going to be great otherwise at least join the communities. For example, we ourselves have a community in telegram and discord that you guys can join and talk to each other that so many people who are learning competitive programming are there.
More than a thousands of people who are learning competitive programming are in there and it's good if you join there and interact with others and I strongly recommend that to everyone. Don't isolate yourself. Five, thinking less than or more than what you should.
Another big mistake that people usually make and I myself made this mistake in different periods as well is to think on problems less than or more than what they should. Let's make it simpler and clear. As a rule of thumb, you should keep thinking on a problem as long as you still feel like there are things that you can think about.
When you feel that you're stuck, it's completely okay to go open the editorial, maybe read the first line of it and then continue thinking. I had a lot of interviews with great competitive programmers with Raina, with Unik, with other people that they also said the same thing. It's not like no you should never read the solution of the problem.
We had a teacher who told us this that you should never read the solution of the problem. Keep thinking without any limits. But that's not good because maybe you will spend so much time on a problem that in that time you could explore so many more ideas also is completely incorrect if you start reading the problems and once after reading going and reading the editorial.
I believe that this is something that you feel yourself. It's not very good to set a time limit. That's something that you feel yourself that when you have like no idea for the for example last 10 minutes that you're thinking about this problem, there's really no progress and you have no idea about it.
In that case, it's completely okay to start reading the tutorial. And what I recommend is to read the first line or the first two lines of the editorial and see if that gives you some ideas to think more. If it does, continue thinking after that.
Don't read the Is this right away. So always keep this in mind. Don't think more than required or less than required.
Six being lazy and searching for hacks. Well, sometimes what I see in people is that they look for a easy way to get great, get to grandmaster to red color very easily. That's never possible.
All these tips that I'm giving you is how to not waste your effort. But still you should put effort. Put effort but in the correct way.
It's not like okay there is a way that I don't put effort and I'm going to be great at competitive programming. No. Anyway, at the end of the day you should put a lot of time training to get better.
I myself trained a lot for more than 2 or 3 years to achieve international grandmaster for the first time. So it's not like okay over the course of 3 months I can get to IGM. No, it's not possible.
You should definitely put a lot of effort. There are no easy hacks that okay if I do this I can do that easily or very fast. No, nothing like that exists.
Watch this funny part of my interview with Omni. After around 2 years you became a red color. So and you said that everyone can become gym.
So what was your practice method in that time so that people can also do that and maybe they can also reach grand master. Um I I solved a lot of problems you that's it. How how long how long you were uh solving problems per day or per week?