|
|
-
Make sure you're eligible
to compete.
-
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.
-
If possible, practice with the compiler your site will be using.
-
Understand your programming language.
-
Beef up your programming skills.
-
Practice, practice, practice.
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
-
File I/O: opening, closing, reading, and writing files.
-
Character classification and case conversion.
-
String handling, including converting between strings and numbers.
-
Using arrays.
C
-
The formatted file I/O functions fprintf and fscanf, 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
-
ACMIO: Java I/O for the ACM
Programming Contest.
-
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.
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.
- 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.
Practice, Practice, Practice
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.
Other Competitions.
|