ka16's blog

By ka16, 11 years ago, In English

Hi everyone, This is my very first Codeforces (CF) blog and my question is:

For people who can solve A,B,C (CF-Div2) level problems comfortably, how can they train to improve their skill to solve problems of D,E (Div2)/B,C (Div1) level efficiently. "Efficiently" here means within the contest time, or reasonably quick, e.g. less than 1h.

I know practice makes perfect, and did read some helpful blogs about practicing with DP problems, or some advanced data structure/algorithms, such as segment tree, suffix array, Z-algorithm, etc. However, I'd like to ask for more concrete and comprehensive advice/suggestions. For instance,

  • what specific types of problems, algorithms, or data structures, etc., should we be familiar with?
  • Besides algorithmic skill, what specific programming skill do we need to obtain?

Also, if you know helpful resources, such as tutorial, books, websites other than Codeforces, Topcoder, please share them. I think a lot of people, like me would be very grateful for your help. Thanks in advance!

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

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

what specific types of problems, algorithms, or data structures, etc., should we be familiar with — i have a simple approach, just take a look at editorials of past rounds and you'll see what types of algorithms and data structures were used most often)

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

    Do you think it takes "being great at maths" to be great at problem solving?

»
11 years ago, # |
  Vote: I like it +7 Vote: I do not like it

Many problems in Div1 are "ad hoc" problems and don't require special data structures or algorithms. Often you can just use regular arrays and basic programming techniques. More important is to develop your problem solving and mathematical skills.

For example, greedy algorithms are often difficult to come up with, but once you know how to solve the problem, the coding part is easy.

Dynamic programming and segment tree are basic tools and you should know them well. Suffix array and Z-algorithm are advanced techniques and they are rarely needed in contests. I would suggest not to spend too much time for memorizing complex algorithms.

»
11 years ago, # |
Rev. 2   Vote: I like it +10 Vote: I do not like it

My approach (though I am yet too low level to give this kind of advice) is the following:

"If after every competition you give enough effort to understand EVERY problem which was offered and train yourself to be able to code solution to every one of them within 30 minutes, then you will inevitably progress with time."

So I think that for your progress it is more important what you do with those difficult problems after contest then during the contest. If you do nothing after contest, you'll never be able to solve them during the contest. If you always solve them after contest, at some point you'll train enough to be able to solve them during contest.

»
8 years ago, # |
  Vote: I like it +12 Vote: I do not like it

My advice is to solve all old div 1 E problems (it does not matter if you use editorial, even reading tutorial does not make it easy)

I could not do that but when I started solving a few, I was on Div 1 for a few times. :)) So give it a try.

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

    I think that's a really bad advise.

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

      It would be great if you could tell us why.

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

      yeah I agree with DuckLadyDinh Sir, Solving Div 1 E problmes will make you familiar to catch the logic behind them . It will be tough in the initial phase but when you get a pace you will definately able to do the Div 1 contest very easily.

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

        alright then try this method and see if you can continue it for more than a month and at the end of this month tell everyone how many Div1 E problems you solved during this time and what did you learn from those problems.

        i think going from solving Div2 A to Div1 E is absolutely ridiculous. have you ever seen the number of people who solve Div1 E in a contest? or even the number who solve Div1 E after a contest.

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

          If you see number of who solve problem, may be everybody see it like you, and nobody solve it :))

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

          The problem always lies in whether or not we can continue our strategy for long enough. If you cannot concentrate, any advice would be unhelpful, and mine is not an exception.

          You can start reading a problem now and solving it month later. Then you can say you have tried it for a month, but it is no use. Time does not count, only the number of problems you solved count. A month or a year depends on how much you concentrate.

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

      Does my color make it bad??? :(

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

        No, not at all. The person who asked this question is struggling with DIV1 B and C. I guess the best thing for him to do would be to solve a lot of problems related to several topics. Everyone has their own preference for learning and getting things done. I don't know much about the person who asked this question(like how much time he spends on coding or his DS knowledge), so I don't know what would work for him.

        You've suggested him to solve DIV1 E problems(from level 3 to level 8). They require advanced DS or algorithms knowledge.

        I'm an average coder and I attended a coding camp a couple of years ago where they started of with a DIV1 E problem(it was something related to 2D DP). Most of the things they said flew over my head cause I was not so familiar with the basics of DP.

        I think if someone starts from DIV1 E, they'd probably get stuck and lose interest in CP soon. Its better to go step by step. Maybe what you said might work for a very few but they'd fall in the minority group.