Standings in 38th Annual World Finals of the ACM International Collegiate
icpc.baylor.edu
icpc.baylor.edu
I realize I didn't exactly put a lot of time into practicing and learning new material, but now that I've graduated I'm hoping to practice more and eventually try raising my rating on TopCoder. If anything, training for ICPC drilled the basics of algorithms and data structures into my head and lead me to find tons of excellent resources for improving in these competitions (and consequently, programming/problem solving in general).
Indeed, most of the top competitors have been practicing since high school. We were lucky to assemble a team that has been training well before.
MIT's team consists of freshmen who are still in good training since their national high school math olympiad trainings from their respective countries.
My first serious introduction to algorithms was through Tim Roughgarden's 'Algorithms: Design and Analysis' course on Coursera. It's a nice formal introduction and really focuses on and builds an intuition for how to think about problem solving like a computer scientist. I'd also recommend Steven Skienna's Algorithm Design Manual as it's written in a similar style.
As mentioned earlier, the TopCoder Online Judge is a great tool to practice problems as well. I could never find a tutorial which covered how to effectively use TopCoder as a practice tool so I wrote one for my programming club: http://acx0.com/cpc/topcoder.html (note: the rest of my site is a complete mess right now)
Of course, there's tonnes of other resources out there but these would be my top recommendations so far.
Live comments about the problems from the legendary Petr Mitrichev: https://docs.google.com/document/d/1rjGwA7ChLJr2ibHVbt-GirDp...
Of course raw coding talent & algorithmic skill are paramount, but what's neat about this contest is there is only one keyboard per team, so things like these quickly set teams apart:
* ordering the problems according to difficulty
* architecting a solution before implementing it
* concise, effective, communication
* using brute force when elegance adds time
* knowing your environment like the back of your hand
* ability to thrive under pressure
In my opinion, skills like these translate really well to success in the fast-paced, agile shops that are flourishing in many markets.
Imagine it like solving problems in mathematics , the better your brain is used to solving similar problems in the past, the faster you will end up solving the relevant task at hand.