Competition Format & Judging
There will be 6 problems in both the Intermediate and Senior divisions, to be completed in 3 hours. Each problem has a statement which describes a problem you must write a program to solve. Students submit the source code for their program (called a submission) which is then compiled (if applicable) and run against a series of different input scenarios to test correctness and efficiency.
Students may make multiple submissions to a problem, of which the best submissions are used to calculate the total number of points the student will get for that question. Each problem contains a number of subtasks, worth a total of 100 points. All problems and subtasks may be attempted in any order. See the Scoring section for more details.
Program specifications
For each problem, students are required to write a program that solves the problem described. Each problem specifies:
- an input file to read the problem data from (e.g. foodin.txt)
- an output file to write the answer to (e.g. foodout.txt)
- a time limit that the program must run within for each test case
- a memory limit that the program must run within for each test case.
Input/output format
The problem statement will describe the format of the input file your program must read from, and the desired output format of the output file your program should write the answer to. If you do not follow the expected format, you will likely score zero for that submission.
The contest system provides some leniency in the output format: it will ignore preceding and trailing whitespace (spaces & tabs) on each line.
Do not read from/write to any files other than the input and output files specified in the problem. In particular, any output to the screen will be ignored, and no input from the keyboard will be supplied.
Code templates will be provided for each problem that handle reading input and writing output. Using these templates is strongly recommended.
Supported languages
Students can submit in C, C++, Python 3 or Java. Please see the Technical Specifications page for specific version details.
Submission
When submitting solutions, students should submit a single file (e.g. file.cpp, program.py) containing the source code that will solve the problem. In particular, students should not submit the compiled executable (such as file.exe). Compiled executables will result in a ‘Compilation failed’ verdict, and will receive a score of zero.
You cannot make any submissions once the three hours are over! Students should not leave all their submissions until the last few minutes, otherwise they risk running out of time. You should submit each solution once it is written. (You may always resubmit a better solution later.)
Scoring
- A student’s submission is compiled and run against several input scenarios to test the correctness and efficiency of the submission.
- These input scenarios are grouped into subtasks, which are each worth a proportion of the full 100 points.
- When judging a submission, each subtask is judged individually. For each subtask, several input scenarios will be presented to the program. The program successfully solves a subtask if it produces the correct output for all input scenarios.
- For each input scenario, the program must run within the given time and memory limits specified in the problem statement. If, during judging, a program does not run within the time limit or uses more memory than permitted, it will fail that scenario and receive no points for the subtask.
- The final score for a problem will be the sum of the point values of all the subtasks that have been solved by at least one submission. This means students can write separate programs to solve different sets of subtasks, and their score will be automatically combined. The contest system will keep track of and display to the student their current score for a problem, at any point in time.
- Please note that the scores shown to students during the contest are provisional only and are subject to change. The judges reserve the right to re-judge any submission or re-examine any student for any reason before declaring official results.
Scoring example
For example, imagine a problem that asks you to find the median value in an array of N
integers. Then the problem might include a description of subtasks that looks like this:
For all test cases:
1 <= N <= 100 000
The integers will be between 1 and 1 000 000 000 inclusive
Additionally:
- For subtask 1 (25 marks),
N <= 1000, and N is always odd
- For subtask 2 (15 marks),
N <= 1000
- For subtask 3 (20 marks),
N is always odd
- For subtask 4 (40 marks),
no special constraints apply
-
If you coded a program which worked correctly and within the time limit for all test cases
where
N <= 1000
, you could expect to solve subtasks 1 and 2, for 25 + 15 = 40 marks. -
If you coded a program which worked correctly and within the time limit for all test cases
where
N is odd
, you could expect to solve subtasks 1 and 3, for 25 + 20 = 45 marks.
We take your best score for each subtask among all your submissions. Thus, if you submitted both programs above, you would earn 25 + 15 + 20 = 60 marks for the problem (even though neither solution you submitted scores 60 marks on its own).
Judging
- Much of the judges’ input data will be far more taxing than the sample input given in the problem statements, and may push your program over the time limit. In this way, efficient programs will be rewarded.
- Judging will be performed on a 64-bit Linux system with a clock speed no less than 2.0GHz, and all time limits refer to this judging machine.
- Programs written in Java or Python may run slower due to the overhead of the associated interpreters and/or virtual machines. The judges may at their discretion increase the time limits for these languages accordingly. Contestants should note that this is not guaranteed, and that this will not give these languages an advantage.
- The memory limit is on the overall memory usage including executable code size, stack, heap, etc.