TL;DR: Я участвовал в своем первом соревновании по программированию на Канадском компьютерном конкурсе Университета Ватерлоо, к которому я присоединился ради развлечения. Я получил 60/75, что было неплохо.

Когда я присоединился к школьному компьютерному клубу, одним из первых, что они сделали, было выполнение задач по программированию для Канадского компьютерного конкурса Ватерлоо (CCC).

К сожалению для меня, у них нет JavaScript, но есть Python, который я знал достаточно, чтобы обойтись.

В конкурсе нам дали 5 вопросов, каждый посложнее, и у нас есть 3 часа, чтобы ответить на них.

Я постараюсь объяснить каждый вопрос и то, как я их решил. Оригиналы вопросов можно посмотреть здесь

Первые 3 вопроса довольно легкие для младших, а вот четвертый и пятый сложнее. Этот год не стал исключением

J1: кипящая вода

В вопросе использовалась формула P = 5xB — 400 для расчета точки кипения воды на основе атмосферного давления. Ввод даст нам значение B, которое является точкой кипения. Если значение P больше 100, это ниже уровня моря, если значение P меньше 100, это выше уровня моря, если оно ровно 100, это на уровне моря.

Это решение дало мне 15/15:

В строке 3 мы вычисляем атмосферное давление, а в строке 5 используем условные операторы для вывода вывода на основе атмосферного давления. В целом довольно простой вопрос.

J2: Тихий аукцион

Этот вопрос тоже был довольно простым. Оценщик вводит сумму ставки и имя участника торгов, и мы должны найти того участника, который предложил самую высокую цену.

Это решение дало мне 15/15:

Я использовал массив для хранения суммы ставки и имени участника торгов, я получаю самую высокую ставку, используя функцию max(), и, поскольку индекс участника торгов и его соответствующая ставка одинаковы, я использовал функцию index, чтобы получить индекс самую высокую сумму ставки и использовал ее для печати имени участника торгов на основе индекса.

J3: Секретные инструкции

Этот вопрос меня немного смущает, как это не стало идеальным.

Оценщик вводит 5-значные числа. Мы должны «расшифровать» его. если сумма первых 2 цифр четная, то направление «вправо», за которым следуют остальные 3 числа, если нечетное, выведите «влево», за которым следуют остальные 3 числа. Если сумма равна 0, выведите предыдущее направление, за которым следуют остальные 3 числа. Если это 99999, то это означает выход.

например, если ввод значения:

57234

00907

34100

99999

наш вывод:

right 234

right 907

left 100

Это решение получило меня 15/11

строка 4–8 запрашивает ввод данных пользователем.

Поскольку в Python обычно нет начальных нулей с числами, и был сценарий ввода, в котором первые 2 цифры складываются в ноль, которые оба были бы равны нулю, таким образом, то, что было бы 5-значным вводом, превращается в 3-значный ввод для компьютера. Что я проверил в строке 13.

Однако условия в строке 15 и строке 18 довольно прямолинейны, и они печатают соответствующие направления и третью-пятую цифры того, как далеко двигаться в этом направлении.

Оглядываясь назад, ввод может содержать отрицательные числа, такие как -99100, у которых их сумма была бы совершенно другой, и я не знал, что они даже вводят отрицательные числа.

J4: Расстановка книг

Хотя пятый вопрос должен быть сложнее, чем четвертый, этот вопрос для меня кажется наоборот. Мне даже пришлось пропустить этот вопрос и перейти к следующему и вернуться к нему позже.

CCC любит давать четвертый и/или пятый вопрос младших задач, которые исходят от одного из старших. Хотя после разговора с другими людьми в моем клубе, которые задавали вопросы старшим, кажется, что они тоже этого не поняли. Что удивительно, потому что это абсолютно гарантирует участие и в старших вопросах.

Концепция этого вопроса очень проста. Это дает вам последовательность букв для представления размера книг: L , M , S

Наша задача заключалась в том, чтобы найти наименьшее количество ходов, чтобы поменять местами книги, пока они не встанут в правильном порядке от наибольшей к наименьшей.

Например:

SML потребуется как минимум 1 переключение между S и L, чтобы быть в правильном порядке. Однако чем больше вы продвигаетесь в тестовых примерах, тем сложнее входные данные.

Это мой код, который я придумал, это решение принесло мне 9/15:

Подводя итог, я получил входные данные, скомпилировал их в правильный ввод и проверил, насколько велики различия. Если есть 2 книги не в том месте, то математически предполагается, что их переключение приведет к правильному результату.

Оглядываясь назад, я думаю, что мне очень повезло получить 9/15. Хотя это работает в более простых ситуациях, это не совсем подходит для более сложных. Я думаю, что этот ответ довольно далек от правильного пути, потому что иногда одну и ту же книгу нужно менять местами более одного раза.

J5/S2: Современное искусство

Хотя предыдущий вопрос был не о пожилых, этот был. В целом этот вопрос я нахожу намного проще, чем предыдущий вопрос.

У нас есть картина размером с указанный вход. По умолчанию каждая ячейка черная. Однако каждый штрих в строке или столбце, указанном во входных данных, переключает цвет отдельной ячейки с черного на золотой и наоборот. Затем мы должны вывести, сколько было золотых ячеек.

Это решение принесло мне 10/15

Я использовал логическое значение с True, представляющим золотые ячейки, и False, представляющим черные ячейки. Как только мазки из ввода сделаны, мы подсчитываем, сколько из них True (значение, которое представляет золото).

Проблема для меня была в том, что лимит времени превышен. Однако я не уверен, как это решить, поскольку не знаю, какая часть занимает больше всего времени и как найти более быструю альтернативу.

Вывод

В целом, эти вопросы в целом были проще, чем в предыдущие годы, на которые я учился. Я был вполне доволен своими результатами. Но, к сожалению, мне нужно получить 65/75 или выше, чтобы мое имя появилось на веб-сайте, чего я не сделал. Я считаю, что ответил на большинство вопросов в меру своих возможностей, и я с нетерпением жду возможности сделать это в следующем году.