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 или выше, чтобы мое имя появилось на веб-сайте, чего я не сделал. Я считаю, что ответил на большинство вопросов в меру своих возможностей, и я с нетерпением жду возможности сделать это в следующем году.