by Chua Hock-Chuan (firstname.lastname@example.org)
To know more about ICPC, read the ICPC mother site (@ http://icpc.baylor.edu/icpc/) or Wiki “ICPC”. To summarize, ICPC is the programming contest for the university students (just like the IOI – International Olympiad in Informatics – is the programming contest for high school students). The ICPC contest rules are:
- Each team consists of THREE students
- Each team is given only ONE computer
- Each team is given 5 hours to solve 8-10 problems (in C, C++, Java and possibly Pascal)
- The team who solves the most number of questions in the shortest time is the winner
- There are two stages for the contest: Regional’s and the Grand Final. Winners of each regional contest proceed to the Grand Final
Step 0.1 – Read, Read, Read: on programming, data structures, algorithms, and object-oriented programming.
Step 0.2 – Pick your Language: Pick a programming language that you are comfortable, either C++ or Java or both (but not C nor Pascal as they lack advanced libraries).
Step 0.3 – Gather Programming Resources: Gather programming books and materials, especially online references and resources.
Step 0.4 – Setup your Programming Workbench: If you can afford a laptop, get one (so that you can program at the Starbucks and in the train).
Depending on the host, the contest could be run on Linux (most likely) or Windows or any other exotic machines.
For Java programmers
Use JDK 1.5 and above, which greatly simplifies the IO processing. The Java IDE of choice is certainly eclipse – an open-source IDE supported by IBM (the official sponsor of the contest), and it runs on both Linux and Windows. For newcomers, read “How to install Eclipse“, “writing your first Java program in Eclipse“, and “debugging Java program in Eclipse“.
For C/C++ programmers
It is harder to decide because you have a few options:
- In Windows, you could practice on Microsoft Visual C++ 2005 (an Express version can be freely downloaded from Microsoft). For newcomers on VC++, read “Write a C++ program in Visual C++“, and “Debugging C++ program in Visual C++“.
- In both Linux and Windows, you could use the open-source Eclipse C/C++ Development Tool (CDT) IDE combined with Cygwin’s GCC/G++ compiler. For newcomers, read “How to install Cygwin“, “How to install Eclipse CDT“, “Writing first C++ program in Eclipse CDT“, and “Debugging C++ program in Eclipse CDT“.
- [TODO] Linux’s IDE.
Important for All Programmers
- You should be familiar with the use of graphical debugger to improve your programming efficiency and productivity.
- You should be familiar with the libraries, such as Java’s API and C++ STL.
- [TODO] more
Step 0.5 – Online Judges and Training Sites: There are many “online practice sites” called online judge, that archive hundreds (or even thousands) of past contest problems. You could try the problems at your own time and own target, and submit your solutions online. You program will be automatically compiled and run with a carefully-designed set of test inputs. The status of the run, such as “accepted”, “wrong answer”,”compile error”, “presentation error”, “time limit exceeded”, “memory limited exceed”, “output limit exceed” will then be shown to you. In the case of compilation error, some of the sites may also show you the compilation error messages.
These are the sites that I frequently used (google or wiki “icpc”, “online judge” to get the full list).
- Peking University Online Judge (PKU): This site support many languages, including Java (JDK 1.5), GNU’s GCC/G++ (for C/C++) and Visual C/C++ version 6.
- Universidad de Valladolid Online Judge (UVA): This is the most reputable site, with a good forum (equipped with search). The support for C++ is excellent, however, the support for Java is mediocre (no JDK 1.5).
- USA Computing Olympiad (USACO) Training Program: This is the training site for IOI (International Olympiad in Informatics for high school students) instead of ICPC. However, it provides a very systematic training on the algorithms frequently encountered in contests, e.g., shortest path, greedy, dynamic programming, heuristic search, minimum spanning tree, and etc. It supports C, C++ and JDK 1.5.