Getting ready for ICPC? Make sure you go through this checklist:

- Make sure you’re eligible to compete. This PDF flowchart might help.
- Find a coach and two teammates (unless they found you first).
- Make sure your coach registers your team before the deadline.
- Understand the regional contest rules.
- Study the notes to teams.
- Participate in the North American online practice contests, or by solving problems on Kattis.
- Bring lots of reference materials.
- Understand your programming language.
- Beef up your programming skills.
- Check Your Mathematical Knowledge.
- Practice, practice, practice.

We suggest bringing language reference manuals, data structures and algorithms textbooks, discrete math textbooks, and general math reference books. (The problems don’t typically assume or require sophisticated mathematics, but you might be able to use math to simplify a problem or find an easier solution.) Also bring printouts of the problem statement and solution for any practice problems you worked on, and any notes you or your coach may have created.

Note that while sites will usually provide some online documentation, it is not a good idea to rely on that too heavily. When one of your team members is using the computer, he or she should be programming, not browsing through online documentation looking for inspiration. Use online documentation to help you remember the details of what you already know.

Obviously the better you know your language the better you’ll do. Here are some suggestions about what you should know.

*All Languages*

- Character classification and case conversion.
- String handling, including converting between strings and numbers.
- Using arrays.

C

- The formatted I/O functions
*printf*and*scanf*, and the corresponding string functions*sprintf*and*sscanf*, which are much more powerful than most people realize. - The string functions
*strchr*,*strrchr*,*strspn*,*strcspn*,*strpbrk*,*strstr*, and*strtok*. - The binary search function
*bsearch*and the quicksort function*qsort*.

C++

- The STL classes
*bitset*,*deque*,*list*,*map*,*priority_queue*,*queue*,*set*,*stack*, and*vector*. - The STL algorithms
*accumulate*,*adjacent_find*,*binary_search*,*copy*,*count*,*equal*,*fill*,*find*,*for_each*,*generate*,*includes*,*inner_product*,*lexicographical_compare*,*max_element*,*merge*,*min_element*,*mismatch*,*next_permutation*,*prev_permutation*,*remove*,*replace*,*reverse*,*rotate*,*set_difference*,*set_intersection*,*set_symmetric_difference*,*set_union*,*sort*,*swap*,*transform*, and*unique*. - The STL function objects such as
*equal_to*,*logical_not*, and*plus*. - The string stream classes
*istringstream*and*ostringstream*.

Java

- The
*Scanner*and*Formatter*classes, plus*printf*. - The wrapper classes
*Boolean*,*Character*,*Double*, and*Integer*, which have a number of useful methods. - The
*java.util*collection classes*ArrayList*,*BitSet*,*HashMap*,*HashSet*,*LinkedList*,*Stack*,*TreeMap*, and*TreeSet*. - The
*java.util*class*StringTokenizer*. - The
*java.util.regex*classes*Matcher*and*Pattern*. - The
*java.math*class*BigInteger*.

Python 2/3

- For standard input: read, readline, readlines
- Basic data structures: list, dict, set, tuple
- Modules for data advanced structures: array, collections, heapq, bisect
- Regular expressions: re - compile, match, search
- Note: Python may not be a good choice for time-critical problems.

Knowledge of the following data structures, algorithms, and programming techniques will be useful.

- Basic data structures: stacks, queues, arrays, and lists.
- Basic algorithms: sorting and searching.
- Binary trees.
- Brute-force search.
- Backtracking search.
- Generating all permutations or combinations of a set.
- Recursion.
- Dynamic programming.
- Graphs and their algorithms, including breadth-first search, depth-first search, minimum spanning trees, shortest paths, topological sort, and transitive closure.
- Basic parsing techniques such as recursive descent, operator precedence, or infix-to-postfix conversion.

You should also practice with a variety of different types of problems. Mid-Central usually includes some combination of the following:

- Short problems with elementary coding,
- Longer problems, but where the instruction sequence is laid out for you; you just have to make sure you make no mistakes when coding it!
- Problems requiring basic data structures
- Problems with fairly direct applications of upper level algorithms
- Problems requiring a very creative solution, no matter how many algorithm classes you have taken

Up to 25% of the Mid-Central Regional Competition may include *higher
math* as described below:

*Higher math* may include:

- matrix operations: multiplication, addition, subtraction; solving a matrix equation
- 3D vector operations: addition, scalar multiplication, dot product, cross product, triple scalar product as volume
- root finding of continuous functions by bisection
- calculus of one variable topics: finding extrema with the help of derivatives

*Schedule*. Ideally you should practice once per week. Have a 1-3 hour
practice where you try to solve as many problems as possible under
contest conditions. Any problems that you don’t solve must be solved
during the week before the next practice. Keep a record of all the
problems you solved, their solutions, and any notes about unusual
features of the problem.

*Team Strategy*. You only have one computer, so learning to work as a
team is essential. The most important thing is to accurately judge the
difficulty of the problems. Many talented teams have done poorly because
they started working on one of the hardest problems first. Remember that
the length of a problem description is not necessarily related to its
difficulty. For additional tips, check out Teamwork in Programming
Contests: 3*1=4.

*Problems*. There are many sources for practice problems. Here are a
few.

Text

Online

- Open Kattis: Large collection of contest problems from all around the world. Open Kattis also provides the same judging system and backend that we use during the actual regional contest.
- Project Euler: Collection of problems that tend to be more mathematically oriented.
- The ACM ICPC Live Archive. Most of the regional and finals problems since 2000, configured for on-line problem judging.
- The huge University of Valladolid archives in Spain, with on-line problem judging.

Other Competitions.