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:
- I solved problem without any hint;
- 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):
- Trying to solve problem for 1.5 hours (could be split into two days);
- 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;
- 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;
- 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;
- 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:
- 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;
- 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:
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.