Competitive Programming

What Is This Book About?
This book is about programming competitions and what you need to know in order to be competitive....

Where Can I Compete?

 * Annual ACM International Collegiate Programming Competition (ICPC) and their associated regional contests
 * Annual TopCoder Open (TCO)
 * Annual TopCoder Collegiate Contest
 * Annual Facebook Hacker Cup
 * Annual Google Code Jam
 * Annual International Conference on Functional Programming (ICFP) Programming Contest
 * Weekly TopCoder contests
 * Annual Business Professionals of America Conferences (National High School vocational program)
 * Various online judges

Why Should I Compete?
The primary reason why people compete in programming contests is that they enjoy it. For many, programming is actually fun, at least until they get a job doing it and their desire is burnt out of them. It is also a good way to meet people with similar interests to your own. But for those of you who need additional incentive, it is also a good way to increase others awareness of you. Major programming competitions are always monitored by people looking for new talent for their organizations, sometimes these are the people who actually fund the contest. High school programming contests (such as the ones sponsored by the BPA) often are to help prepare students for college or careers in computer programming. These contests often attract scouts from colleges looking to award scholarships to these individuals. For example, IBM is currently funding the ICPC, a contest that costs them millions annually. Why would they pay so much for a programming contest? They view it as an investment. It lets them filter through the talent and get to those that could potentially make IBM much more money in the long run. Before IBM the contest was funded by Microsoft for the same reasons. Organizations that feel like they can't quite afford the huge price tag associated with ICPC have begun to fund cheaper contests, such as TopCoder, and in the case of Google, running their own contest through TopCoder's technology.

How Do I Get Started?
The first thing needed to get started is proficiency in a programming language and familiarity with a text editor/development environment. The two languages common to all of the above programming competitions are C++ and Java. These languages will be used throughout this document. There are many books and tutorials available to learn these languages, in addition to an unending amount of freely available code on the internet.

Which Language Should I Use?
In a competitive programming environment the value of a programming language differs from a software engineering environment. While good software engineering practices will not hurt you in completing a task, they can often consume valuable time with little benefit. Many software engineering techniques are designed for projects with many programmers and projects that take a large amount of time to complete. In a programming competition these conditions no longer hold. Most times it is a single programmer working on a task, with very little time in which to complete it. Also, some programming contests test a programmer's skills in a specific language.

What Are The Contests Like?
The TopCoder Open is available to both college students and professionals who are registered members of the TopCoder website and who are at least 18 years of age at the time of registration. The Tournament consists of three online rounds which lead up to the main onsite tournament and includes several competitions: Algorithm, Design, Development, Marathon, Mod Dash, and Studio Design. Competitions such as the Coding Phase in the Algorithm round allow contestants to choose between four programming languages, Java, C#, C++, and VB.NET, so you can use the one you are best at. There are also competitions where you get the chance to challenge the functionality of other competitors’ code.(“Welcome to the 2012 TopCoder Open” Copyright © 2001-2012, TopCoder, Inc. http://community.topcoder.com/tco12/)