Hello people of Codeforces, I hope you are all doing well. I'm a high school student, and my biggest passion is Competitive Programming. I started Competitive Programming a few months ago, and so far I have quite improved, that now I can solve problems that I couldn't solve months ago. However, being a **self-learner**, I have many troubles improving my skills. One of these troubles, which is the most significant hindrance to me, is that my I have been unable to improve my **thinking skill**. When solving problems, I am still **following my old path of thinking**, and for harder problems, this path of thinking will not help me reach the solution, since these problems require creativity, but my way of thinking is too simple and quite trivial. I feel that I have been struggling to think differently, or think creatively, from when I started Competitive Programming, and most problems that I can solve usually have something in common with the ones I have known. So, to all people here, how have you been able to think differently, and invent solutions for new problems you have never seen ?. Furthermore, can anyone recommend me how can I practice to improve my thinking ability, or creativity. I know that the way to think about a problem matters the most to me, so I will really appreciate your help. Thank you all for reading this blog, and have a nice day.

+1.......struggling from the same problem

Me second. My problem-solving abilities are often instinctive, which is to say my directions when solving problems relies on guesses on the first sight. This limits my abilities to solve harder/ad-hoc problems (combined algorithms or logic), and I've not progressed for months because of this. So to all the masters and strong-thinkers out there, can anyone please recommend me how to get pass this obstacle? Have a nice day.

Yes, exactly. I think that in order to become better, our ways of thinking should be more systemized, not instinctive. There are of course exceptions, but for self-learners like me with no guidance, having the ability to make critical observations may be the most necessary thing.

I will share an observation, about how I reached till here, people say to practice and practice. And in a way it is true, but I will share how I practiced.

I chose problems bwn 1500 — 1700 level and practiced. I observed that if you distribute the number of problems solved according to the rating range then your rating(approx.) = corresponding rating of the median of max problem solved count + [100 , 200] , although I observed it for me and my friends, whose rating are in the range 1500-1700, I believe this might hold for higher ratings too.

So , I would suggest (Which i am doing myself now) is to practice problems in the rating range [x-200,y+100] where x = your current rating and y = your desired rating.

Why x-200, so that you can have a checkpoint, a minimal rating that you will have, also to polish and keep urself in shape (say for speedforces). And why y+100 , so that you can aim higher and move up the rating ladder while not getting dissapointed at the same time so y <= x + 300. this way u will gradually increase your x and y and move up :) , all the best.

Can the desired rating that is y be anything? Like I really want to be blue

yes, it can be but you need to lift it gradually, start with the lower values, appear for contests, increase your ratings and repeat.

I really liked your method...

Currently I am following your method. I am practicing 1300-1700 rated problem and most of the time requires 9-12 hours for harder ones. But I am happy with it since I discover the solution...

don't spend more than 2-3 hours on a single problem.I think it's better to check editorial after that.

Thank you so much for your response. I agree that practice is the most important way to become better, but the way we think about a problem also has as much significance to our progress as practicing does. Solving lots of problems has significantly improve my speed and confidence, but that hasn't helped me a lot to derive solutions for harder problems. As user060804 said earlier, my problem solving skill is instinctive, and as a result, it can be too naive and trivial for some problems. Hence, I think that to push ourselves further, our thinking ability is really important. Do you think that there should be something special about our practice, not just merely solving problem ? Especially since I'm

self-learning, this might be the most essential thing I need.How do we solve a new problem? We remember some similar problem we have already solved before and try to solve new one same way. But if you want to improve your skill, then you have to forget about old solutions and find out all different ways of how new problem can be solved. In other words, do not stop thinking after problem solved some way, but find other ways to solve the problem.

Are you sure of it? I often feel like this, but then I go back to some problems which I failed to solve before, but now I am able to solve. The change in thinking is often so slow that you don't feel it.

Thank you for your response. Yes, I feel like my way of thinking has not changed so much. I am still thinking quite trivially, and uncritically. Most problems I am able to solve now are quite similar to the ones I have already known, but I usually fail to solve harder ones, which require thinking nontrivially. Nevertheless, as you said, I believe that the change in our ways of thinking is so insignificant to us that we can barely see it, and I'm sure time and practice will help me improve my thinking ability. I have just a small question: is there something special about your way of learning and practicing that helps you push yourself forward, and how can a self-learner obtain the ability to make critical observations ?

Nothing special about my way. When I fail to solve a problem, I read the editorial and discover that there is another way of thinking that I missed. I try to analyze why I missed it, broaden my thinking and reduce misses.

I think most of competitive programmers including me are self learners. We learn from editorials, other users' solutions and sometimes comments in contest's announcement / editorial.

Conclusions I drew from a blog entry. a couple of days ago.

Practice on problems close to your maximum problems under contest.

I still think speed is relevant, so find the problem level you can solve like 3 or 4 within an hour. The Filter on the problemset page is great for that. It also helped me rising my focus time.

Thank you for your helpful comment, I think your method will be really useful for contests, but right now I'm focusing on improving my observation-making skill. Nevertheless, thank you so much for your response, I will surely follow your method for potentially better in-contest performance.

Try solving a single question in various ways. Even when you solve a good question by yourself, you should check other's solution and editorial and in many cases you will learn a more efficient way to solve that problem. This thing helped me to grow. This is important because in a contest,you don't have to just solve the problem you need to solve them as quickly as you can.

Thank you so much for your response. This might seem to be the best method I can try now. I will definitely adapt this habit, and work harder on improving my skills. I really appreciate your help, and have a nice day.

Trust me it works. You will learn new stuffs every time you go through editorial or somebody's approach and I guess it will solve your problem up to some extent. Best Wishes!

Thank you, I will definitely try that.

Hello please give me some suggestion that how should i increase my typing speed and also i am facing difficulty in solving dp questions .Please suggest me some editorials or books , i have read many questions but i have to see the solution , i myself wont be able to implement them .

Competitive programmers handbook covers common techniques: https://cses.fi/book/book.pdf

learning classical algorithms and then using it to solve problems boost confidence and gives new direction of thinking . dividing time proportionally in learning theory and solving problems is the key . participating on different sites can also be helpful .

Watch Anime and Listen to Twice.

The most important step in creative problem solving is making observations about the problem. When you solve a problem, take pen and paper and scribble down as many interesting properties of the problem as possible. Play around with different inputs and see if you can find a pattern in them. Note down any particularly strange problem constraints (example: some number is always odd). Usually, the answer can be found in some combination of these observations. See if you can simplify the problem to a more solvable form by applying any of the observations (example: some function is monotonic, I can use binary search, now the problem is how I can check the answer quickly).

Of course, solving more problems will help you improve your way of thinking. In this case, I suggest trying hard problems for long periods of time (1-2 weeks) without reading editorials (something I struggle a lot with myself). Hard problems are where you really challenge your thinking, and even if you don't actually solve the problem, doing it over a longer period of time encourages you to play around with a lot of things in the problem, and even if some of them are not useful for this problem they may be useful for some other problems.

Of course, every problem is different, and a method of thinking that works well on some problems may not work well on others. In that case, don't get discouraged. Maybe the editorial uses some really magical observation, or the problem turns out to be something like "HLD with convex hull in segment tree" (aka classic technique spam). In that case, try to reason to yourself on how you can feasibly reach the magic observation, or split the problem into parts which can be done with classic techniques.

Hope that helped!

Thank you so much for your response. Your recommendation is really helpful for me, and is definitely what I was looking for. Thank you for your help, I really appreciate it. Wish you a good day.

You're welcome. Glad I was able to help.

Solve problems without looking for editorial or any help. Do this for some period of time.

You can see that I got the expert tag from a newbie tag in just 2 months. I believe the thing helped me a lot is to try to solve a problem by my own idea then look at the editorial and see how others solve the problem.. I spent time until I can feel their idea in my heart. Interesting fact is now I can think a lot deeper and getting more solution approach than 2 months past me [ Sometimes I can't believe that I didn't a idea for a simple problem two months ago]. I hope this way of learning could you to think deeper and to get variety ideas :)

During my time in quarantine, I have practiced quite some problems, and I can happily say that I am improving, really happy with my rating graph. So what I've observed with my problem-solving abilities (not the though process) in the past few months, is that I'm comfortably able solve mostly those problems, which I have solved before. And the most important part I felt was, thinking about the 'what could have been' of the problem. Learning the data structures is important but what's more important is to think about all of their applications. To be honest, most of everything I've learned is from reading tutorials. I don't believe that my brain is fast enough to learn something and extend that concept to all its applications and apply them in a contest straight away, but I can surely do that if I just keep doing problems on that concept. A quite recent example of this was the Problem D in the Educational Round 87. I saw the problem and instantly binary lifting on fenwick tree came to my mind (after 1 wrong submission, because I didnt pay attention to memory limits, dumb me). It's been too long since I saw a problem based on binary lifting, but I did practice on it, when I first learned about it. I mostly speak for problems C,D (or E) of Div2 contests, that the more you know about some concept(data structure and algorithms) and the more familiarity you have with it, will make you progress. Eventually most of the problems will then seem like 'Hey, I have done this before, it's easy'.

Thank all of you for all the extremely helpful responses. The responses I've got during these few days have helped me to learn many good practices and habits. I really appreciate your help, and again, I wish all of you a good day.

Wow, you have improved really quickly =)) Congrats upon reaching 2000!

there is a catch this is not his 1 account(cz he solved 3 que in his 1 contest) if it is then he can be better than tourist someday

Welp, this is his first account, but he won't be better than tourist (it's much harder than you think). Nevertheless, I'm very confident that 6520 will reach red one day =))

hmm he will surely!!

Do you guys were that good when you made your account like he did 3 in div2 consistently... It is insane for me, or maybe I m very dumb!!

Ah...? I don't think its impossible to solve 3 in the very first contest...

i dont know how much you knw when you give your 1st contest but in my case i did't even know STL so it was impossible for me at least!!

Well, before I created my Codeforces account, I've been learning programming for a month or so, hence my first contest was not my very first experience with competitive programming anyway :D

Yeah, but it's still your first CF account, and it's astonishing to see somebody improved over 300 points in the span of 3 weeks =)

Well I'm not that good actually, it's just partially luck :D

orz!!! it is still very very good its like you are made for this!!

I'm afraid I'm not that good. It is still a long run to be like a "truly" good competitor. It might take me much more time to be "made for this" as you said :D.

After Writing the post I think you have improved a lot( seeing your increased rating just within few weeks) by the valuable suggestions which you got here.Kindly will you share some suggestions which you got and that really helped you and some additional suggestions according to your experience.

This is the epitome of laziness. The suggestions are right here...

I'm afraid I'm not good enough to provide any suggestion to other people, since it is quite exaggerated to say I've improved that much. Nevertheless, I mainly followed shenxy13's recommendation of practicing. Besides, I also started doing regular Mashup contests with my friends who are of similar rating level as mine. I'd definitely recommend competing in virtual contests with friends, so that both will have the opportunity to improve.