The Australian Informatics Olympiad
The AIO is Australia’s version of the United State’s USACO contest: A nationwide programming competition for advanced high school students, which also serves as a qualifier for the International Olympiad in Informatics (IOI) for Australian students. Another similar contest is the CCC (Canadian Computing Competition), which shares a lot of similarities in format. Luckily, all of these are open to students in any country to participate in and be recognized for their achievements!
AIO, like USACO and CCC, uses the “online judge” format. For each problem, competitors are given a scenario, often inspired by a real-world problem or decision process, and must write a program that accepts data about the scenario and determines one or more results or correct decisions based on it. The source code (written in Java, C++, or Python) is submitted to the online system, which automatically runs the program multiple times, each time with a different data set which should lead to a different answer. The program must run automatically, calculating results and making logical decisions without further input from the programmer. Points are awarded based on which ones the submitted program matches the expected answer. Time is also a factor – more efficient algorithms are expected for the harder problems, or else some of the runs of the program might take too long, and reduce the credit obtained for the program.
For example, the “Election II” problem from AIO 2022 requires the program to determine the results of an election based on a text-based vote count like “BAAACBAB”, for which the winner is A. The program must read in text like this from a file, count the letters, and compare the counts to determine a result. Each input text example is different, and therefore so is the correct winner.
The contest is taken over a 3-hour time period. It has Intermediate and Senior divisions based on grade level (up to grade 10 and 12, respectively), but these only affect awards recognition at the end; the test itself is the same. Like the CCC, the problems generally follow a progression of increasing difficulty, so even beginner students may be able to solve the first couple of problems, while experienced competitors will often be able to complete the first few very quickly and spend most of their time on harder problems. Students can work strategically over the course of a contest round, and come back to earlier problems to revise them if they only got partial credit on the first few tries.
The Australian Olympiad is given every August, which is very convenient for students whose preeminent national competitions (USACO, CCC, and ACSL) are not offered during summer break in the northern hemisphere. It’s a great way to stay sharp and build your programming skills over the whole year, and of course, an additional opportunity to receive recognition. This year, KTBYTE students will take the competition at 7pm US Eastern Time on August 23 (note that this is indeed August 24 in Australian time, the date you will see on the official website), so mark your calendars now!
The AIO has two sites to know about, one for practice and one for live competition. Students must register via their school for the live competition, so make sure to let us know as soon as possible if you’d like to participate! You can sign up right away at https://www.ktbyte.com/classes/aio-registration/aio-registration (with a small fee to help us cover the cost of ordering the contests for our students), or email us at firstname.lastname@example.org if you’d like to talk more about the competition. We will distribute login information to students closer to the day of the competition, so if you’ve registered, please look out for those messages. We encourage all students in our Core 4 and above classes to give it a try!
You can dive into the practice site right now, to get a sense of past contests and warm up your problem-solving skills. You’ll fill out a simple registration form at https://orac2.info/accounts/register/ and then access past AIO problems at https://orac2.info/hub/aio/ – you can also look at the list without logging in. Your login will let you submit multiple solutions, get used to using the interface of the website, and track your progress working through past problems for practice.
Working through problems requires the same skills as solving USACO, CCC, and ACSL programming problems. You’ll have to carefully think about the task given, break it down into logical steps, and implement them. Beforehand, you’ll want to review the specific way to read input and output in your programming language to be sure you can implement it correctly, so make sure to submit some practice problems early to make sure you’re learning the right approach! After the main implementation, you’ll want to think about what possible data sets could come up based on the problem description, and test and debug your program for several of them. For higher-level problems, you’ll need to also think about the efficiency of your approach – skills you can learn about in our USACO training classes, which apply equally well to the other national competitions.
We recommend using Java for most of our students since they are most familiar with it and it works well for competitions. If you haven’t already, install the Java JDK from https://www.oracle.com/java/technologies/downloads/ then install Eclipse from https://www.eclipse.org/downloads/. Next, there are a couple details to know about while implementing code in Java.
- When you submit a solution, it must use the “default package”, meaning that no package line appears at the top of your .java file. This is easily done by ensuring the package line is blank when making a “new class” in Eclipse or another code editor.
- You must read and write data to files named after each problem, such as “elecin.txt” and “elecout.txt” for the “Election II” problem (available on the practice site). Students who have taken our competition prep classes probably know a few methods to do this already, but in this contest, you don’t even need to memorize one! The website itself gives you a “template” you can fill in, such as https://orac2.info/problem/aio22election/attachment_in_browser/election.java for the “Election II” problem. If you plan to use it, make sure to study it and get to know how its classes and methods work before the contest. You may need to use String functions as well as Integer.parseInt in combination with this code. Remember, it’s also fine to use classes we’ve seen in KTBYTE classes like Scanner, StringTokenizer, or PrintWriter if you prefer them instead.
- The Java class you create for each problem must be called Solution and therefore must be saved in a file called Solution.java. This can make keeping an archive of your solutions a little confusing since all files have the same name! One easy way to handle this is to make packages labeled by the individual problem name, like “electionII”, and drag your completed solutions from the default package into the named one, once you’re finished testing and submitting your code to the website.
You’ll submit your practice solutions to the website via the “Submissions” tab above any problem listing. (It can be nice to open the submissions tab and the problem description separately, so you can look at the description while debugging and resubmitting multiple attempts.) You can upload a file, or perhaps even easier, you can copy your code from Eclipse and paste it into the website! Make sure to choose the correct programming language, such as Java, then press the submit button.
You’ll see a list of subtasks – sets of test cases with similar data, each of which is scored separately – and a bar next to each of them which the site fills in with color codes as your program is tested on each case. Like the CCC, you must get ALL test cases in a subtask correct to get credit for that subtask, but you can get partial credit on the overall problem with a program that works for some subtasks but not others.
If your results aren’t perfect right away, you’ll need to brainstorm more test cases and make sure your program is completely debugged. The later subtasks may also require higher-efficiency solutions. Refine it as much as you can, then move on to the next problem. Remember, problems 4-6 of any contest will be MUCH harder than 1-3, and very few students solve problems 5 or 6 in a given year, so don’t hesitate to go back through earlier years for additional practice, rather than trying to complete every single problem each time.
Several activities can help you improve your competitive programming skills. KTBYTE classes include a sequence of competition prep classes starting at the Beginner level (https://www.ktbyte.com/classes/comp-prep/comp-prep) or continuing through increasingly difficult USACO divisions. Please contact us right away (email@example.com) if you’d like a consultation about signing up for a class!
Remember that participating in multiple contests improves your skills in all of them. CCC, ACSL, and USACO vary in schedule and difficulty, but are all worthwhile to try! Leetcode, a general “online judge” problem site, is also a great resource – just make sure to filter the difficult to a level you can build from (https://leetcode.com/problemset/all/). And, the USACO website itself has a great listing of training resources, especially for more advanced students (http://usaco.org/index.php?page=resources).
And we’re off…
Good luck in your preparation and practice for AIO 2023, just a month or so away! Don’t forget to register so we can order your test and sign you up with our school.
Remember, it’s okay to be anywhere from a beginner to a competition expert. Use this time to get a sense of the basics through the practice site, and you’ll be building your skills for the future, even if you find it difficult to start with! However, many of our students who have worked with our short-answer homework problems will find the first problem or two in the contest manageable, once you get used to the problem format.
Please contact us at firstname.lastname@example.org with any questions or concerns!