Блог пользователя yongwhan

Автор yongwhan, история, 6 лет назад, По-английски

Hi guys!

I am soliciting an opinion on a practice strategy for a low-purple who are aspiring to become a mid-orange. I am pretty sure this kind of questions is very frequent and common among competitive programmer but I would like to just confirm your opinion to be sure. I read "A Way to Practice Competitive Programming" by Masataka Yoneda among other things. So, I know one way of getting there. But, I would like to know if there is a better recipe before I commit to doing something naive.

To get to orange from purple, is it SUFFICIENT to practice problems in rating ranging from 1900 to 2300?

My practice strategy has been focusing on all the problems that are below 1900 mostly, hoping to become a purple through solving problems fast. However, I have a feeling that I would hit a wall pretty quickly if I continue this recipe since the problems in division 1 are much harder.

Now that I finally became purple (after solving some thousands of problems in Codeforces and other platforms), I would like to know if my naive strategy of solving all problems in a particular rating range is enough to get me to the next rating color (from purple to orange, from orange to red, and so on).

I think this question is especially relevant to those who worked hard to get to orange from purple because, if it did not take a long time to get to orange color, I assume that you had a prior exposure to competitive programming in some other shape or form.

Those who had to train hard to earn the color change from purple to orange, what worked especially well for you guys?

I am looking for a genuine advice for me to get to the next level.

Thanks!

  • Проголосовать: нравится
  • +136
  • Проголосовать: не нравится

»
6 лет назад, скрыть # |
 
Проголосовать: нравится -220 Проголосовать: не нравится

uh, I went from low purple to mid orange without any practicing (it took a lot of months). the only thing you need is a talent, not practicing.

»
6 лет назад, скрыть # |
 
Проголосовать: нравится +136 Проголосовать: не нравится

First step: maintain div1. That means solving AB fast (around 30 minutes at most?) and C slow sometimes

Second step: get yellow. Solve ABC fast-ish (under 1h), ofc it depends on contest difficulty but this sounds like the average. In this range you can find people between master and IGM, so a few minutes can make the difference between top50 or top300 going way down if you get too many WA or take too long for some problem. An extra problem every once in a while is a nice boost of rating. Also, the difference between GM and IM could be doing this consistently, I haven't looked much into it but that sounds about right.

Sounds like practicing in that difficulty range would help, just don't look at tags to make it closer to a real contest where you don't know what the problem is about. Keep in mind that in the contest you'd need to solve these problems in around 20 minutes or less. If you practice like this try throwing a harder problem once in a while to challenge yourself, gotta do something in that 1h+ downtime after you solve the problems that should be easy for you.

I still think diving into really hard problems somewhat often between usual practice (for me usual practice was cf and icpc virtual contests + upsolving) like once in a week or so is optimal for fast learning tho.

  • »
    »
    6 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +43 Проголосовать: не нравится

    I never understood why you would analyze things like "I need to solve AB fast and then C in 1 hour". Mainly solve problems slightly above your level and you will get better.

    • »
      »
      »
      6 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +29 Проголосовать: не нравится

      I agree that you should solve problems slightly above your level and you will get better but to get rating either you solve faster than others or solve an extra problem. Chances are, if you solve an extra problem you solved the earlier problems fast too so you have more time for the last problems.

      I talk about time more because I think it's worth reflecting why/where you spend time in solving problems, and what you could do to solve it faster like knowing a data structure, not getting stuck in the same idea and being able to start from scratch again, rereading the statement if the problems looks strange, thinking about how to implement with simpler code. I could find many other examples, the worst one is when you see a problem that you should've solved because you've seen something similar before but couldn't remember until after the contest when discussing or didn't upsolve (recent relevant example, lots of people that solved the cf div1B that was IOI shoes and didn't solve it during IOI).

      Now it sounds related to just "gitgud" right? An important part of having better performance is solving faster, even more so in short contests, but everything is related in some way.

      • »
        »
        »
        »
        6 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        But you don't decide to "solve faster than others or solve an extra problem" in order to get a better place. If you are good, you perform well, which means being fast and solving more problems. So yeah, the goal should be to get good, not to aim for the effects of being good.

        Sure, nobody should focus just on easy problems or just on hardcore problems. But analyzing exactly how a good contest performance looks like in a CF round... that's some high-level shit that nobody should care about.

        • »
          »
          »
          »
          »
          6 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +5 Проголосовать: не нравится

          But you don't decide to "solve faster than others or solve an extra problem"

          Framing it this way has a few advantages.

          First, it's a psychologically nicer, more tractable framing of the problem. It doesn't sound very motivating to say to yourself "do better", but saying "let me try to solve X problems under Y minutes" is much less intimidating, especially if you are already close to that. This framing makes the goal feel more real and reasonable.

          Second, it's a useful benchmark. If you can reframe your desired rating into a desired level of contest performance, it's arguably a better, more precise metric to track. Ratings have a good amount of noise in them -- sometimes you get un/lucky, sometimes you feel great/terrible, etc. This way, you can track your progress even without a rated round.

    • »
      »
      »
      6 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +39 Проголосовать: не нравится

      What do you mean exactly by "above your level"? Do you consider the time taken to solve the problem? The problem rating? Or if the problem uses stuff that is unknown to you?

      • »
        »
        »
        »
        6 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +8 Проголосовать: не нравится

        It means a hard problem that you can still sometimes/usually solve, likely not after just 5 minutes of thinking. If you solve such problems, you will from time to time encounter new techniques and algorithms.

        I practice nowadays by solving AGC B-E problems but I'm not doing F mainly because I'm lazy and not motivated enough. I can comprehend an editorial for F and that's a very important thing — solving too hard problems is a waste of time because you would spend hours to fully understand a solution. Also, I solve problems div1-CDE in Codeforces and just sometimes skip the last one if it's very difficult and not my taste of topics — but I should do that one too if I want to maximize my improvement.

    • »
      »
      »
      6 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +13 Проголосовать: не нравится

      I have solved 60+ problems in 2300 difficulty and I think I can solve ~70% problems in that difficulty. But I often take ~90 minutes. I don't even get continuously stuck for 30 mins, I just get a lot of wrong ideas that lead nowhere and in a continuously larger gap of time between the ideas. Should I go to higher difficulty, or stick to current and try to get faster?

      • »
        »
        »
        »
        6 лет назад, скрыть # ^ |
        Rev. 2  
        Проголосовать: нравится +8 Проголосовать: не нравится

        Taking ~90 minutes is quite normal for hard problems. It means you would perform well in IOI or ICPC, so I would say that you're doing fine.

        If you just care about your Codeforces rating, solving easy problems for speed is important too.

    • »
      »
      »
      6 лет назад, скрыть # ^ |
      Rev. 4  
      Проголосовать: нравится 0 Проголосовать: не нравится

      I agree with your comment here. However, it seems like finding problems "slightly" above my level is a bit tricky when I try to make a virtual contest though. It seems like putting division 1 ABC would be a reasonable estimation on what these problems are. I will not put too much emphasis on timing as I ramp up the training but as I get more practice done I will slowly and gradually be more sensitive to the time spent on solving a problem. Does this strategy align well with what your thought on the ideal practice strategy is?

  • »
    »
    6 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Thank you so much for your genuine recommendation, tfg! :)

    I will follow your suggestion and start practicing with division 1 ABC problems. Rather than strictly following the problem rating, I will follow that strategy instead because it sounds like solving division 1 ABC problems would be effective enough. I will make it a goal to solve all of them under 1 hour eventually.

    Also, following your recommendation, I will make sure to add a really hard problem in the mix in each virtual contest for a faster learning experience.

    I will start with a virtual contest that is either 75 minutes or 90 minutes long to simulate the actual contest, slowly making it shorter as I gain more confidence.

    Again, thank you so much for your candid suggestion. I will make sure to report later once I see the result of the future training.

»
6 лет назад, скрыть # |
 
Проголосовать: нравится +43 Проголосовать: не нравится

The difference between stable purple and yellow is Div1C. If you can solve Div1 ABC consistently (3 out of 5 contests), even if you solve C at last moment, you will get yellow soon. The difference between master and IM is mostly consistency and speed, as in most contests D is only solved by GM+ coders.

»
6 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится -17 Проголосовать: не нравится

Why don't you start participating in group contest? I have just started solving shaazzz group contest problems and have clearly seen a big impact on my speed and problem solving abilities. I know I've not been candidate/master (yet), but finding a good source of problems would definitely be a good choice to make. Feel free to join shaazzz group or any other group you would like Also I am not this group's admin, and I don't benefit from inviting people to it

»
6 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

best strategy is to solve questions quickly in div1 + div2 combined or educational.

Edit : The above strategy will make you orange but to get to mid orange, you simply need to solve A, B under 1 hour and C in another 1hour. I am saying this because I have analysed this too much. Also your strategy is cool, just give some virtuals with the above time limit and upsolve (This is how I reached blue, I am trying to reach purple using the same strategy, I would be happy to take your suggestions.)