I have been trying these competitions for sometime now but never got beyond the moderate level. Seeing code from people like ACRush and Petr makes me wonder if one can ever develop this talent or if one is just born with it.<p>And it not that I don't understand basic building blocks of these programs like dynamic programming or graph algorithms, but the way they get applied in the problem just bends my mind. So concretely what things can I do to make myself better at these compitions.<p>I do understand practice is fundamental. If right now I am from 0 to 10 I am because of that but anything apart from that like books, courses etc.
Although you understood the importance of practice, I still want to reiterate it. Practice is the key! As far as I know, ACRush and Petr have many years of experience of practicing and competing in serious algorithmic contests such as IOI, ACM, etc. They have solved thousands of algorithmic problems and counting. Through that hard working process, they polish their problem solving and coding skill to the very high level as you know. I am not sure hard working is enough to reach the level of Petr's or ACRush's but I believe it can push you further than you think you can be. Here are my concrete suggestions:<p>1) Read relevant chapters in CLRS (Introduction to Algorithms, kind of bible textbook).<p>2) Try to solve as many problems as you can in:<p><a href="http://acm.uva.es/" rel="nofollow">http://acm.uva.es/</a> (mix, some hard)<p><a href="http://acm.timus.ru/" rel="nofollow">http://acm.timus.ru/</a> (mix, some hard)<p><a href="http://www.spoj.pl/" rel="nofollow">http://www.spoj.pl/</a> (mix, many hard)<p><a href="http://acm.sgu.ru/" rel="nofollow">http://acm.sgu.ru/</a> (mix, many hard)<p>Topcoder.com (of course)<p>3) Solve the problems first then read experts' code to learn coding skill from them. Petr publishes his own TC screencasts in his blog: <a href="http://petr-mitrichev.blogspot.com/" rel="nofollow">http://petr-mitrichev.blogspot.com/</a>
You can learn a lot from watching them.<p>4) Practice consistently and never give up.<p>Good luck.