Sahilamin219's blog

By Sahilamin219, history, 6 weeks ago, In English

I m in my semi-final year of my college and i have been practising a lot over on codeforces than any other cp site. And as of current state of pandemic i m pretty sure that not many of the companies are going to visit our college for internships and a pupil like me stand no chance for off-campus. Also besides competitive programming i haven't done any great projects as i m told not to do any before becoming candidate master .I think that's enough reason for me to become Div1 candidate as soon as possible.

However, i m not concerned about getting any kind internship this year than i m in improving my competitive coding skills. But it really sucks when every time i m asked how many question i did in contest from my family side because it have never went more than three.Now i don't even look on how many question are there in contest because its always has been three for me.

I love giving contest than studying algorithms , watching any youtube tutorial or just simply solving problem but this just doesn't feel any great now when you know what the result is going to be before giving contest. Recently, i have studied some nice algorithm on graphs like bridges finding, kosaraju algorithm, DSU but when i came on codeforces to solve these topic related problems they all seems to be too tough.

So i just wanted to ask where should i practise most that will help my increase my problem solving skill? Because i just tired of looking into to tutorial every time and moreover i don't believe anymore that this thing really helps as my friends who are not regular in competitive programming are able to solve more problems than me in less time and many time come with a better and easy on implementing solutions . Looking into tutorial is like mugging up one technique for one kind of problem which you sure going to forget after looking hundreds of them.

I also made a notebook and started writing all the key points for question which i fail to do but its like every time there come always some new approach to solve the problem in contest.

I really want to enjoy giving contest and keep doing competitive coding as long as i can .I m aware that there is no magic but i want you to share what you all did most which made you see the improvement in yourself.

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

»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by Sahilamin219 (previous revision, new revision, compare).

»
6 weeks ago, # |
  Vote: I like it +10 Vote: I do not like it
  1. Give virtual contests and find out which problems are the ones you can't solve, and why.

  2. Do not look at the editorial easily.

  3. Do not look into the test cases when your solution fails some test case.
  4. Try to solve your rating + 200 problems.

My basic advice would be to practise in the same environment as in a contest. You don't get to read the editorial or see the test cases in the contest. You have to solve them no matter what. So in order to practise that, you should practise problems like you're in a contest.

»
6 weeks ago, # |
  Vote: I like it +37 Vote: I do not like it

First of all, don't solve problems just to get a job/internship. Of course, experience in competitive programming helps a lot in acing interviews/coding tests: it's helped me significantly on that front as well. But if getting a job is your primary reason for doing CP, it detracts from the beauty/elegance of the problem-solving approaches employed in CP.

Secondly, despite the term competitive featuring in the name, I'd suggest you don't constantly compare yourself with friends, at least initially. CP has a learning curve, and different people traverse that curve at different paces. Again, this constant comparison can take away from the joy of struggling hard on a problem and appreciating the solution once you finally get it. Once you become a bit more confident in your own skills, some competition can be healthy, but if it's demotivating you, it's a sign for you to ignore it.

"Also besides competitive programming i haven't done any great projects as i m told not to do any before becoming candidate master"

I disagree with this approach. Anybody with even meager experience in the software industry knows that CP and algorithmic coding tends to translate very little to real-world applications (there are some scenarios where they are necessary, but in my experience, they tend to be outliers, not the norm). It's true that CP will help with FAANG-level companies, and that CP-like questions tend to be asked frequently in college internship/placement seasons, but that doesn't have to be the only way to enter the industry.

In short, I believe that if you put in effort in a field that you are passionate about: whether that's CP, ML/Data Science, app development, or whatever else, that will be recognized and rewarded. Maybe not immediately, but eventually. (maybe this is a naive belief? idk) But if it's CP you choose to focus on, make sure you're doing it because you enjoy solving problems.

Finally, as for how to improve, I suggest doing virtuals: personally, I found that that worked well for me. I do believe that after a certain rating point (roughly 2000), it makes sense to study algorithms more in-depth like topo-sort, Fenwick/segment trees, etc. Till that point, however, I personally found that I learned best by simply solving problems in virtuals and in contests.

»
6 weeks ago, # |
  Vote: I like it +3 Vote: I do not like it

That's exactly the same thing I am experiencing right now, so I feel I can answer this.

A little background: I think one of the most important part is to actually participate in contests and not just solve random questions, because then you can't time yourself. For me, I was doing a lot of Div 3 virtuals because I need to get fast in implementation rather than being able to solve flows or FFT or other big stuff. After the virtual it's also very important to upsolve. Even Div3-F and Div3-E are good enough to train you for Div2-C and Div2-D. So it's really important to upsolve otherwise you'll only be solving weaker problems, which is again not good.

This has been my plan of action for past few weeks. So what now? I have actually come to a stand still. Most of the times when I do a virtual, I can solve A, B, C pretty quick(Div3 again), but struggle a lot on problem D, sometimes being able to solve it but mostly fail to do so. When D is somewhere around 1600, I struggle a lot. If its 1800 and above I mostly fail.

So what next ? I think at this point one needs to solve more of 1600ish and above problems. But again I need to solve them in a timely manner, otherwise, I would learn slow and not push myself hard enough. A strategy would be to begin solving your virtuals in reversed manner. You can start from D(or even choose E or F) and then solve C, B, A. However, I think this is not efficient enough.

A better strategy would be to chose 4-5 problems of rating 1600 — 2000(or whatever suits you) from Codeforces which you have not seen, add them to a mashup or maybe use Vjudge to create a private contest. Try to solve as many during the two hour limit. It will be a bit hard at first but after sometime you'll start getting the hang of it

This is what I will be going to do so its just a suggestion. You can always keep upsolving and trying harder problems! :)

  • »
    »
    6 weeks ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    Yes i agree with you but the point i wanted to make was to up-solve without looking into the editorials.

»
6 weeks ago, # |
  Vote: I like it +5 Vote: I do not like it

One word: Upsolve.

»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

When I started CP I wasn't able to solve problem B, just A in Div. 2. At that time I had a pupil rank. I trained hard solving many problems, and I could solve problem B in ~1h. I then raised to specialist. I started practicing a different kind of style for some time. I participated in various div3 solving 4 or 5 problems. Then I became expert and unrated to participate in Div3. I made some Div 2 contests and my rating started to oscilate around 1600. I then started practicing some harder problems, to finally get > 1700.

It is very personal your training method, but the best is to build stuff around what you already have. Building layer by layer you can achieve your goal. At a starter level, problems B and C are very standard, they look similar in some contests, they have a simmilar patern. You can learn how to solve B just by having some basic knowledge about programming, some simple algoritimhs, and practice. Problem C usually requires some algorithms but not very complicated. When you get to problem D is where things get interesting. I have not many experince with Div 2 D, but I can tell that they vary whey more than B.

»
6 weeks ago, # |
  Vote: I like it +9 Vote: I do not like it

But it really sucks when every time i m asked how many question i did in contest from my family side because it have never went more than three.

Don't ever let your family know what you are doing. Your family is willing good for you. But, you might sometimes get discouraged. And don't be with such friends who will judge you based on your rating.

Don't get me wrong. Family is everything. But you should hide somethings from them.

»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

You ought to appreciate the art of problem-solving so as to pro it.

»
5 weeks ago, # |
  Vote: I like it +3 Vote: I do not like it

Though I'm still a specialist skill-wise, I'm going to share with you how did I manage to come out of the grey-green zone and became a stable specialist.
I was stuck below 1400 for quite a long time as you can see from my graph. I could do div2A but not B in contests. Then I picked a2oj div2B ladder and solved all 100 problems in it within, I guess, 2 weeks. It improved my implementation skill a lot. The result was started to show. I moved to the boundary of pupil-specialist afterward. Then I picked the R1500 + R1600 ladders, solved 1500 completely and 1600 ladder more than half. I became faster in div3 contests and could solve A and B within an hour in div2 contests. Still not much improvement in div2 contests. Also at that time, I used to participate in every contest on almost all platforms. In nutshell, you improve only when you solve harder problems than your current skill level.

These days I've taken rest from contests and focusing on solving R1600-R1700 problems. I know I should keep participating, but I feel like resting for some time as I was too tired when I reached 1600 after facing so many downs. So, with this rest, I'm rejuvenating myself.

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    "These days I've taken rest from contests and focusing on solving R1600-R1700 problems." I noticed this thing as you are in my friend list already ;) Thanks for sharing it.