
 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.
 If possible, practice with the compiler your site will be using.
 Bring lots of reference materials.
 Understand your programming language.
 Beef up your programming skills.
 Check Your Mathematical Knowledge.
 Practice, practice, practice.
Reference Materials
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.
Understanding Your Programming Language
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
 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 timecritical problems.
Beef Up Your Programming Skills
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.
 Bruteforce search.
 Backtracking search.
 Generating all permutations or combinations of a set.
 Recursion.
 Dynamic programming.
 Graphs and their algorithms, including breadthfirst search,
depthfirst search, minimum spanning trees, shortest paths,
topological sort, and transitive closure.
 Basic parsing techniques such as recursive descent, operator
precedence, or infixtopostfix conversion.
Check Your Mathematical Knowledge
Up to 25% of the MidCentral 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
Practice, Practice, Practice
Schedule.
Ideally you should practice once per week. Have a 13 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 online problem judging.
 The huge University of Valladolid archives in Spain, with online problem judging.
Other Competitions.
