Programming

CCC Junior or Senior? How to Choose and How to Score

Two decisions decide most CCC results, and neither of them is how much a student practised. One is which level they wrote. The other is what they did with the last hour.

Modern Age Coders Team
Modern Age Coders Team August 21, 2026
9 min read
Canadian Computing Competition format: five problems, fifteen points each, seventy five total, three hours

The Canadian Computing Competition is run by the Centre for Education in Mathematics and Computing at the University of Waterloo, it is written in schools in one three hour sitting in February, and it is one of the most useful contests a school age programmer can enter. It is also one where two decisions made before and during the contest matter more than months of practice.

The first is which of the two levels to write, because the student chooses. The second is how to spend the last hour, which is where most of the available points are quietly lost.

The format, in one paragraph

Both levels are the same shape. Five problems, fifteen points each, seventy five points in total, three hours. Any full-time student may compete regardless of grade, and solutions may be written in C, C++, Python 2, Python 3 or Java. The CEMC notes that Python and Java may limit a student on the hardest problems for reasons of language design, which is honest of them and worth knowing rather than worrying about, since it only bites at the very top of the Senior paper.

Choosing the level honestly

The difficulty ramp of the CCC Junior and Senior papers, from a single loop to an IOI level question
Both papers ramp across five problems. They start and finish at different altitudes.

Junior is described as being for beginner to intermediate programmers, and its ramp runs from straightforward programming with a loop and a condition, through problems needing loops and conditions and counting together, up to recursion and two dimensional arrays at the top. Senior is for intermediate to advanced, running from basic algorithms like sorting and searching, through more advanced mathematical reasoning, to a final question the CEMC itself calls an IOI level question.

Because the choice is the student's rather than the school's, two mistakes are common and they are opposite mistakes.

  • A capable Grade 9 student writing Junior because of their age. If two dimensional arrays and recursion are comfortable, Junior will be finished in ninety minutes and will have measured nothing. Senior is the honest paper for them, even if the score is lower, because a low Senior score contains more information and more improvement.
  • A Grade 12 student writing Senior because of their age. If sorting and searching are not yet fluent, Senior produces a small score, a bad afternoon and no useful signal. There is no rule that says an older student must write Senior, and a strong Junior result is a better foundation than a demoralising Senior one.
💡

The test we use for the level choice

Give the student an old J5, the top Junior problem, with no help and a clock. If they solve it inside forty five minutes, they should be writing Senior. If they get most of the way, either paper is defensible. If they do not know where to start, Junior is the right paper this year and Senior is the right paper next year.

The J5 kind of problem, worked

Since two dimensional arrays sit at the top of Junior and underneath a good deal of Senior, here is one done properly. A grid of costs, and the cheapest route from the top left to the bottom right moving only right or down.

grid = [[1, 3, 1, 8],
        [1, 5, 1, 2],
        [4, 2, 1, 9]]

rows = len(grid)
cols = len(grid[0])

# cost[r][c] = cheapest total cost of reaching that square from the top left
cost = [[0] * cols for _ in range(rows)]
cost[0][0] = grid[0][0]

for c in range(1, cols):
    cost[0][c] = cost[0][c - 1] + grid[0][c]

for r in range(1, rows):
    cost[r][0] = cost[r - 1][0] + grid[r][0]

for r in range(1, rows):
    for c in range(1, cols):
        cost[r][c] = grid[r][c] + min(cost[r - 1][c], cost[r][c - 1])

for row in cost:
    print(" ".join("%3d" % value for value in row))

print("cheapest route costs", cost[rows - 1][cols - 1])
  1   4   5  13
  2   7   6   8
  6   8   7  16
cheapest route costs 16

The printed grid is the interesting part, not the final number. Each cell holds the cheapest cost of reaching that cell, built from the two cells that can lead into it. Nothing is tried twice and nothing is guessed. A student who can write this, explain why the first row and first column are handled separately, and see that the same table would answer the question for every destination and not just the corner, is ready for Senior.

The scoring strategy that beats working harder

Two ways to spend three hours on a CCC paper, one attempting everything and one finishing what you start
The same ability, the same three hours, and fifteen points between them.

Five problems, fifteen points each, and partial credit available within each problem. That structure has a consequence that students almost never act on: a completed problem is worth more than two half attempted ones, and the last problem is worth exactly the same fifteen points as the first.

Watch what happens with the common plan, which is to read all five, start at the top and keep moving. The student takes S1 cleanly, gets most of S2, gets a few test cases on S3, scrapes something on S4, and spends the last forty minutes on S5 getting nothing. Thirty five points, and a genuine feeling of having worked hard for three hours.

Now the same student with a different plan. Finish S1 completely, including the awkward input cases. Finish S2 completely. Finish S3 completely. Take whatever falls out of S4 in the time that remains, and never open S5 at all. Fifty points, from the same knowledge and the same afternoon.

  1. Read all five problems in the first ten minutes. Not to solve them, to rank them. The problems are ordered by the setters' idea of difficulty, not by yours, and occasionally the fourth is easier for you than the third.
  2. Finish the easy ones properly before starting anything hard. That includes the boring part, which is the edge cases. Points lost to a missed empty input on S1 cost exactly as much as points lost on S5.
  3. Set a hard limit on the hardest problem you attempt. If nothing is working after twenty minutes, go back and reread your finished solutions instead. Rechecking S1 has a better expected value than starting S5.
  4. Do not open the last Senior problem unless everything else is done. The CEMC describes it as an IOI level question. For all but a handful of candidates in the country it is not a scoring opportunity, it is a way of spending an hour.

Where the CCC leads

The route from the CCC in February to the Canadian Computing Olympiad and the IOI team
The February paper is a school hall. The route out of it is narrow and clearly marked.

For most students the CCC is worth doing for its own sake, as one of the few things on a school record that measures problem solving rather than syllabus coverage. For a small number it is a first step. Approximately twenty of the top official CCC Senior participants from schools in Canada are invited to the Canadian Computing Olympiad, a week long invitational event at Waterloo in the spring with contest days and workshops, and Canada's International Olympiad in Informatics team is selected from there.

⚠️

An important distinction for international students

The CCC itself may be written by any full-time student. The CCO invitation is for participants at schools in Canada. A student writing the CCC from elsewhere in the world gets a real contest, a real score and something genuine to point at, and should understand before February that the olympiad route from it is a Canadian one.

Preparing between now and February

The contest sits in February each year, which makes the autumn the sensible preparation window and January much too late to start. For the 2026 to 2027 school year the CEMC lists the contest as 17 February 2027 in North and South America and 18 February 2027 elsewhere, with an ordering deadline for schools of 11 February 2027. That deadline is worth putting in a teacher's calendar rather than a student's, because it is the school that orders.

  • Write past papers, whole, under three hours. Past CCC papers are published. Doing one complete paper properly teaches more than twenty individual problems, because it trains the ranking and pacing decisions that decide the score.
  • Practise reading input carefully. A surprising share of lost points are input handling rather than algorithms, and it is the most fixable category of mistake there is.
  • Get comfortable with two dimensional arrays early. They sit at the top of Junior and underneath a lot of Senior, and they are the last thing most school courses reach.
  • If Senior is the goal, work on sorting and searching until they are automatic. They are where the Senior paper starts, which means anything less than fluency costs time on the problems that were meant to be free.

The student who scores fifty is rarely cleverer than the one who scores thirty five. They just stopped starting things.

, The whole of contest strategy, for a first timer

How we prepare students for it

Most CCC coaching is topic coaching, and topics are the easy half. What we spend time on is the afternoon itself: reading five problems and ranking them, deciding what not to attempt, and the discipline of finishing a solution completely when a harder one is sitting there looking more interesting. Those are habits, and habits need somebody watching to form.

Our CCC preparation is live, one to one or in a batch of five to eight students, taught from India to students in Canada and worldwide. Students often arrive alongside USACO, and the two prepare each other well. The first class is free, and the most useful thing to bring is a past paper the student attempted and a note of where the three hours went.

Frequently asked questions

Any full-time student, regardless of grade. It is written at schools, so a student's first step is asking whether their school runs it, and the school orders the contest ahead of a deadline in the February it is held.

A student writes one level in a given year. The useful way to think about it is that Junior and Senior are two different papers rather than two halves of one, so the question is which paper will produce a real measurement this year.

Whichever they are fluent in, from C, C++, Python 2, Python 3 or Java. The CEMC notes that Python and Java may limit a student on the hardest problems, which is true and only matters at the very top of the Senior paper. Nobody has ever lost a Junior point to language choice.

Yes, within each of the five problems, which is what makes the finish-what-you-start strategy work. It also means a solution that handles the smaller cases correctly is worth writing even when the general case is out of reach.

By invitation. Approximately twenty of the top official CCC Senior participants from schools in Canada are invited to the CCO, a week long event at Waterloo in the spring, and Canada's IOI team is selected from it.

They complement each other. USACO runs several contests a year with automatic promotion between divisions, so it gives more frequent feedback. The CCC is one sitting a year with a fixed five problem structure, which makes it a better rehearsal for the pacing an olympiad paper demands.

September, for a February contest. The most valuable preparation is whole past papers under the clock, and there is no way to compress that into January. A student who has written four complete past papers by the end of January arrives knowing how their own three hours behave.

Modern Age Coders Team

About Modern Age Coders Team

Expert educators making coding and maths clear for ages 6 to 67.

Ask Misti AI
Chat with us
WhatsApp Book Free Demo