poikniok's blog

By poikniok, history, 7 years ago, In English

I have a question to ask experienced contestants about the plausibility of a possible way to improve at programming contests, by somewhat rapidly trying to read through problems and their editorials / solutions.

There have been several existing blog posts on Codeforces about reading theory vs solving problems, however my question is rather different, as rather than reading theory I am curious about specifically reading problems, and then the solutions to the problem immediately, without spending any time on personally thinking about or implementing solutions.

To give a specific example of such a source of problems I am considering attempting doing this with past Topcoder SRMs, as they have the nice property of having both editorials and also the ability to browse contestant solutions through the TC browser here ordered by the ranking / competence of the solver, and also the forums of course which at a certain time period were quite active.

Having done this for about a dozen SRMs this approach seems mildly promising to me, as by removing the need to solve the problem one can get a general idea of what kind of ideas are solvable by certain methods very rapidly. Certainly one does not gain any deep understanding of the problem, but it seems on a per time basis training one’s self to recognize patterns in problem types is somewhat useful. Particularly for me, there is no realistic way that I will ever actually work my way through solving the massive archive of past problems on Topcoder, and thus it seems nice to get some intuition from all the past work that people put into creating the problems and their editorials.

On the other hand I have not heard much about anybody implementing such a training method, which does provoke some skepticism I suppose. General advice has always seemed to me to involve either reading books / blogs / forums about general concepts, or solving problems oneself. Thus I must ask if anybody has embarked on such a project, and if it had any positive results, or alternatively if the consensus is that reading problems and their solutions is useless without personally implementing them?

Thanks for any advice!

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

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

I think:

  • you'll likely end up with knowing tons of stuff, without being able to apply those in real competitions / real life.
  • you'll quickly forget those techniques, because you don't invent those yourselves / don't have the necessary understanding of the problems to come up with those techniques.
  • you'll find new problems "familiar", but still cannot solve it, because you don't have enough understanding of the old problem you solved to modify its solution in suitable way.

Most of the time I cannot solve a problem, I have all the necessary knowledge. I just can't come up with the brilliant idea.

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

I started doing this type of "training" in university. I would read a problem, think about it for 5-10 minutes, and read the editorial to confirm my approach. I would also read through as many solutions as I could to pick up on any implementation tricks. The main advantage is that it doesn't take much time investment, since you don't need to block off a few hours to do practice contests. I wouldn't say it's very effective though if you're maximizing for most improvement over time, but I think it's better than nothing. The reason I did it was because I didn't feel I had enough time to spend multiple contiguous hours a week on practice contests.

For benefits, I feel that normal training will be more effective. Things that I felt I've gotten better at are getting better intuition on problems so I know how to approach them, and solving easy problems a bit quicker. I still have trouble on implementation sometimes, and you can't really replace implementation practice with only reading other people's solutions.

That said, I think this is a great way to informally train if you like to take competitions casually and don't really care about improving quickly (but still want to improve slowly). If you want to become even better, you need to practice. Nowadays, I only "practice" on live contests, which is the only time I get to improve my implementation skills.

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

Thank you for the link!
I don't know about you, but for me it is definitely worth trying, because I will still stagnate if I continue doing what I am doing right now =).

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

I too think that it is not a good approach because as I_love_Hoang_Yen said you will get to know too many things at a very short time and also forget them in a while. I myself have done this type of thing before and barely remember some techniques.

But, say you weren't programming for a while and suddenly you want to attend a contest (a big one) and you don't have enough time to just get back to your previous state, then it is a good trick to use to get some good result. After all being able to do something in the contest is better than doing nothing.

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

Am I the only one who thinks this is a great idea? I did a lot of this (in addition to other training methods at the same time), but never with any particular focus like going through Topcoder SRMs. I would just browse hard Codeforces problems and read the problems and their solutions for fun. It improved my problem-solving speed for sure, and I think it also gave me a lot more intuition for the types of observations I should trying to make when solving problems and which algorithms to apply when. It might be worth writing down a few main points about each problem and/or discussing them with a friend to increase the chances of remembering the techniques you read about. If you do try this, I about very curious to hear how it goes.