arnab_9997's blog

By arnab_9997, 4 years ago, In English

Hello. I have been doing CP actively for approximately 3 months now. I know theory of some algorithms and paradigms like DFS, Binary search, bitmasks, DP, greedy, math algos etc. But I am not good at solving problems using them.

Also, my implementation/ad-hoc skills are decent but I take up a lot of time to solve them. I mostly wreck up my contests because of lack of better implementation skills or over-complicating the problem. In addition, I have a bad a temperament towards contests — I can't think over the entire contest time — I tend to give up within 45 mins if I don't come up with solution of A. Or even if I get AC in A, I tend to give up before contest time if ideas don't strike after prolonged thinking.

So, I thought of doing regular VCs alongside practicing problems in my optimal rating range (900 — 1500 as of now). For that, I will start with virtual contests everyday (exempting contest days) and upsolve till D2 A, B, C and D3 A, B, C, D (further if solves >= 2000).

My default VCs would be in order of recent contests in which I haven't participated. So, do suggest good contests you have in mind and improvements over this strategy. Also suggest some pre-contest routine if you have any.

I will keep updating this blog everyday with VC status. All I got to do this lock-down is CP, so I wish to come out with stronger skills (maybe not just rating) post this lock-down period.

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

| Write comment?
»
4 years ago, # |
Rev. 3   Vote: I like it +11 Vote: I do not like it

Alright, it seems like this is a problem I myself went through for a long time. Right now what you probably require is to just focus on solving problem A about 80% of the time. To do this, you'll have to channel your instincts into uncovering that one shrewd observation (as you graduate, it'll become multiple shrewd observations) in the problem, followed by quick implementation of the answer. Kill your ego and start off by filtering problems in Problemset at a rating of 800. Solve each problem for 15 minutes, if you don't solve it — go to the editorial and ingest, read it till you understand, not just the concept, but the reason your instincts never took you in that direction while solving. If you do solve it — good, still go to the editorial, see if he solved it using a different/shrewder method and do the same routine as I mentioned for the previous case. By the time you are able to solve 800's about 80% of the time (slowly even), you graduate to 900. Follow the same routine. But don't relax on 800 yet, you'll have to make timely revisits, not to just to solve more, but to solve more quickly this time.

This process should continue — solve slowly to 80%, graduate, revisit and solve quickly. But its going to take time, mind you. And most importantly, stop reading up new algos and trying to solve advanced problems. They'll just kill your motivation. You'll learn them automatically when you weren't able to solve a problem and go to the editorial. Most problems atleast till 1600 levels don't require algos but require fast algorithmic instincts. Problems beyond that, require algos and fast algorithmic instincts. Needless to say, you've skipped to the PHD without any prior education — that's the reason you are stuck. Good luck. Be sincere, you should improve.

PS: If time permits, go have a look at Masataka Yoneda's Tutorial on improvement in CP — link. Credits to him. The above is a gist of what I followed, but the framework was provided by his tutorial.

  • »
    »
    4 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Well, given the current level of Div2A problems, I can solve ,let's say 50-60% of them in my practice session — some cause me trouble to think — it's pretty much just the speed and accuracy for Div2A for such problems. Sometimes I have to get a WA before an AC. While for some, I overthink them although solution requires extremely simple observations.

    Yes, I am comfortable with most of 800 — 1000 Rated problems (if you may run a visualizer on my profile). That's why I am now focusing on a quite higher rating range (till 1500). I can solve few of 1400's now. Few are doable. Most require me to think for an hours.

    Yes, I have felt what you say about algorithms — and should I suggest to my peers, don't start with algorithms until you are good with implementation problems — reason being they can't be applied in real contests because weak implementation skills will take up most of the contest time in solving A and B problems.

    I followed Masataka Yoneda's tutorial for some time. You may check my progress here : [https://kenkoooo.com/atcoder#/table/arnab_9997] I was able to solve ABC B within 10-15 mins and C within 30-40 mins (max time).

    • »
      »
      »
      4 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      If you are still thinking on you how to approach div2 A problems check out this video

    • »
      »
      »
      4 years ago, # ^ |
      Rev. 4   Vote: I like it +3 Vote: I do not like it

      Well, 50-60% isn't enough is it? There's a rough (not always accurate) yardstick for calculating the probability of solving a problem of a given rating, given your rating is $$$fraction = \dfrac{1}{1+10^{(r_{prob}-r_{your})/400}}$$$. Here $$$r_{prob} =$$$ problem rating, $$$r_{your} =$$$ your rating and $$$fraction = $$$ probability of solving.

      Now as you'd see if you calculate, if you solve 1000 level problems 50% of the time, your rating is 1000. Now reverse the formula, what would your rating be if you were able to solve 1000 level problems 80% of the time? Use $$$r_{your} = r_{prob}-400 \log_{10}({{1/fraction}-1})$$$ with $$$r_{prob} = 1000$$$ and $$$fraction = 0.8$$$, you'll have $$$r_{your} = 1241$$$ (approx), which is a considerable improvement. And in practice, you'll also notice that your skill at cracking 1200's has also mysteriously improved.

      I repeat, this is just a rough yardstick calculation. (Its on Mike's post about calculating problem ratings. [old]). So I leave it you, whether you wanna keep solving 1500's or you wanna try out a new method that I can vouch for.

      PS. I've seen your visualizer, it looks like you've solved tons of problems from 800-1000. So it's probably more useful if you apply everything I've said above for the range of [1000-1300] instead. Your problem might be that you are solving blindly without retrospection about the problems you've been solving or additional inputs from the editorial. You could maybe maintain a journal of learnings from each problem you solve (or don't solve but use the editorial). While solving problems it'll be useful if you start writing down observations in the problem, usually by piecing the observations together you'd reach the solution.

      • »
        »
        »
        »
        4 years ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        "Well, 50-60% isn't enough is it? " Definitely not. I know I have to pump up the metrics. 1000-1300 seems to be a better learning range to me.

        ...are solving blindly without retrospection about the problems you've been solving... please elaborate this.

        • »
          »
          »
          »
          »
          4 years ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          I’ll give you a small personal example. Lots of times, I get an answer to a question, and get an AC, albeit not convincingly — as in, I wing the logic in lots of places and don’t prove lots of things. But there is no reason to do all of that while solving the problem (atleast if you are training for speed). So what I do after solving the problem is to sit back and try proving stuff. In case I don’t get it, I go to the editorial, read a few lines as a hint, go back to proving. In case I’m still stuck, finish the whole editorial article.

          Another example is to write down all observations you make from a problem. If you get the answer using them, good, otherwise when you go to the editorial, there are high chances that a fee observations you made that might be a part of the author’s observations too. But the there were some you were missing or you weren’t able to fit all the observations you’ve made into an efficient solution. The key step to learning over here is to think about how you could’ve thought of the missed trick. Why the train of thought didn’t reach that destination.

          All these slightly deep questions maybe specific to a particular problem, but over time, you’re brain will stop making mistakes it would’ve if you hadn’t done all of the above. It’ll accumulate all the experience and lead to more problem solving prowess. (Also I forgot to stress on something in the previous article, random solving a set of questions of the same rating is important, don’t filter over topics, atleast at the beginning stages — till you acquire 1700 rating maybe. I used to solve a lot of dp questions of high rating to no avail. One of the most underrated skills is to be able to solve adhoc manner — questions that’ll use concepts from many algos.)

          • »
            »
            »
            »
            »
            »
            4 years ago, # ^ |
              Vote: I like it +3 Vote: I do not like it

            Thanks tor the detailed explanation. I will try adhering to it as much as I can.

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

When I started codeforces, I was not able to solve even the A, Believe me things take time! and practice by practice you'll get there when A is just a cake walk for you, Why A only, even B and C will be something that you would be able to solve easily in less than an hour during an online contest.

The things I did were:

  • SOLVE EASY PROBLEMS: Codeforces problem set filter is quite good now, start with the tag brute force, implementation and maths from 600,700,800.
  • UP SOLVING: This is the best thing that works for everybody. Try to solve the next problem after the contest by reading the editorial, they are actually good and provided with proper reasoning, soon you will be able to see the pattern that A and B follow.
  • NO NEED TO RUSH: Till you get to 1400, I don't think there is a need for particular algorithms, Just get comfortable with the As first, then Bs then we will see the algorithms.
  • GIVE EVERY CONTEST: This is very important, no matter what, just make it your priority. You will get new problems every time and there is nothing better than solving new problems. Codechef, atcoder, hacker earth, codeforces, try all of them. They provide a great learning curve for CP.
  • PUT ASIDE THE EGO: Atcoder beginner contests have the easiest problems to solve, start with them. Don't feel low that you are solving easy problems only, slowly you will realise that you are improving and your submission time of A is decreasing with every contest.

Keep stats! and soon you will see that you have come a long way :)

  • »
    »
    4 years ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    Yes, my current practice strategy is composed of solving 900 — 1500 rated problems of Implementation / greedy / math problems. For contests, I try upsolving the problems as mentioned (till Div2C and Div3D). I already did follow Masataka Yoneda's blog in April and solved almost 50% of ABC B, C problems. Since things started turning out to be monotonous, I moved to CF problems for a change.

»
4 years ago, # |
  Vote: I like it +3 Vote: I do not like it

My strayegy to reach 1500 specialist level was to solve math tagged problems rated 800-1200 and practicing how to solve it fast. you can try it, might help you.

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

idk about you but in my case grinding out 24/7 doesn't usually work out too well for me, i have to take a decent break in between practicing sometimes to reset my mental, so if you haven't taken a break in like a month or so take a few days off to recoup. usually i do better after a few days of break, or even if you don't want to let up then solve just a bit less problems on that day. also it's been pretty well documented that taking breaks every once in a while is better than grinding 24/7 for efficiency's sake