I have no improvement at all after 10 months of consistent daily training. How to train more efficiently?

Revision en3, by omgcoin, 2016-08-25 13:01:08

I spent more than 10 months of consistent training (almost every day, every week) and I have no improvement at all.

Yesterday, my rating is dropped below the level where I was 12th October 2015 (a day of my first contest).

Usually, during contests, I can solve Div2 A for 10-15 minutes, Div2 B for 20-30 minutes, rarely I can solve Div2 C when it's easy. I was at that level in October 2015 and I'm on the same level right now (August 2016).

I still can't solve Div2 C problems and I'm still can't solve problem B quickly without mistakes or being hacked.

So I have zero progress, zero improvement of my problem solving skills after 10 months of almost every day training.

I think there is something definitely wrong with my training method because it's absolutely ineffective.

I'm looking for training advice from experienced participants because I don't want to spent another 10 months and end up exactly at the same level where I was 10 months ago.

My background: I'm working as C/C++ developer since 2009 (early days I was mainly C developer, currently I mostly C++11 developer).

Here is detailed description of my training program:

Every time I'm training on CodeForces, I set up timer for K number of minutes (where K%15 == 0). For me, it's psychologically easier to not to be distracted during specific time frame. Also, I have a journal where I put how much minutes I spent on training every day (including contest time). I keep only "clean" time in my journal, i.e. time when I was not distracted at all. I work in silence and don't listen music during training.

Also, I keep a journal of solved "hard" problems (every entry: day => number of solved problems, usually just one). I consider a problem as hard when the problem level >= Div2 C. I consider hard problem as solved in two cases:

  1. I solved problem without any hint;
  2. I looked at tutorial, then put off problem for a few days, and after try to recreate solution, and make sure that I feel confident that I really understand solution;

I don't consider hard problem as solved if I implement it immediately after I read tutorial or when I don't feel confident that I really understand solution.

I started training on 10th October 2015.

Since 20th February 2016 I keep journal of how much time I spent. Since 11th May 2016 I keep journal of how much hard problems I solved.

Here is my fresh statistics of training:

I spent 89.45 hours in last 93 days (from May 24th till August 24th). It's about 0.96 hours per day in average or 6.73 hours per week in average.

I solved 26 hard problems in last 93 days. It's about 1 hard problem in 3.57 days or 1 problem in 3.44 hours (often combined time for a few days).

Usually, I can train 15, 30 or 45 minutes in the morning before work and 30, 45, 60, 75, 90, 120 minutes in the evening after work.

I'm keeping TODO list of C problems by adding CodeForces rounds to favorites. Usually I add about 20 rounds to favorites (when list is empty) and then work on them starting from down to top of the list till it becomes empty. If I put off problem for a while, I remove from favorites and add it again so that problem will be on top of the list (since I take problems from back of the list).

Typical workflow on problem Div2 C (note that steps could be split into several days):

  1. Trying to solve problem for 1.5 hours (could be split into two days);
  2. Look to tutorial for a hint. It means I can read only first few sentences of tutorial till I get the idea of how to solve problem but don't read entire tutorial. For example, I can read that solution uses two dimensional DP array with states k, m. After that I'm trying to came up with rest of solution on my own;
  3. If I'm still can not solve after another hour, I read tutorial and comments till I understand idea of solution. It could take hour, two, three during several days till I really understand what tutorial is talking about;
  4. When I finally understand solution, I put off this problem for a while (i.e. put to the top of the list). After a while, I check whether or not I really understood solution. If I can easily recreate solution after one or two weeks, then I really understand;
  5. I usually can't solve C problems without hints from tutorial. Sometimes, I can't even solve it with tutorial since I don't understand solution at all. In this case I drop the problem for uncertain period of time (i.e. remove from my TODO list);

So usually, my work on a problem Div2 C can take quite a while. For example:

Day 1: Spend 1.5 hour, can not solve;

Day 2: Look for a hint, try to solve with a hint for another 0.5 hours. Still can not solve;

Day 3: Look at tutorial of the problem and all comments for 1 hour, finally understood solution, put off problem for a few days;

Day 4 (after a few days or weeks): Spend 1 hour to implement solution;

Possible reasons of inefficiency of my training program:

  1. I spent too few hours per day on average. ~1 hour per day is not enough. It will take years till my rating become stable blue;
  2. I spent too much time on Div2 C problems. 26 problems in 93 days is ridiculously low number. I should somehow solve 26 problems in two weeks, not 93 days to get any measurable progress;

Please, help to fix my training program.

P.S. I read CodeForces classic posts about training:

The 'science' of training in competitive programming

How to come up with the solutions: techniques

I know things like zone of proximal development

The problem is that Div2 B is too easy (more than 90% of success) while Div2 C is too hard (low success rate). It's too big gap between B and C.

Tags training


  Rev. Lang. By When Δ Comment
en3 English omgcoin 2016-08-25 13:01:08 522 (published)
en2 English omgcoin 2016-08-25 12:49:24 107 Tiny change: 'ber 2015 (day of my ' -
en1 English omgcoin 2016-08-25 12:29:30 5485 Initial revision (saved to drafts)