Разбор задач "Осеннего программиста 2019"

Revision ru3, by pashka, 2019-11-18 14:30:49

Задача A. Отпуск

Если $$$x+y < n$$$, то было $$$n-x-y$$$ дней без шторма и холодов, если же $$$x+y\ge n$$$, значит не было ни одного такого дня.

Пример кода на языке Python:

n = int(input())
x = int(input())
y = int(input())
if x + y < n:
    print(n - x - y)
else:
    print(0)

Задача B. Простая игра

Минимальное число ходов будет, если все время будет выпадать 6. В этом случае число ходов будет равно $$$n / 6$$$, округленное вверх до ближайшего целого. В большинстве языков по умолчанию делается с округлением вниз, чтобы сделать округление вверх, проще всего использовать формулу $$$(n + 5) / 6$$$, при этом деление делается с округлением вниз. Максимальное число ходов будет очевидно равно $$$n$$$.

Пример кода на языке Python:

n = int(input())
print((n + 5) // 6, n);

Задача C. Алфавит

В этой задаче нужно было найти максимальное число букв из заданной строки, которое совпадает с началом алфавита. Для удобства, алфавит был приведен целиком в условии задачи. Проще всего решить задачу циклом, который на каждой итерации проверяет очередной символ строки. Как только символ не совпадает с очередным символом алфавита, нужно остановить цикл.

Пример кода на языке Python:

s = input()
a = "abcdefghijklmnopqrstuvwxyz"
res = 0
for i in range(len(s)):
    if s[i] == a[i]:
        res += 1
    else:
        break
print(res)

Задача D. Верные утверждения

Эта задача вызвала, к сожалению, больше вопросов у участников, чем предполагало жюри олимпиады. Давайте разбираться, что в ней происходит. Есть $$$n$$$ утверждений вида "Ровно $$$a_i$$$ из этих утверждений верны". Нужно найти максимальное число верных утверждений, которое может быть среди них. Пусть среди них ровно $$$k$$$ верных утверждений, тогда все утверждения, для которых $$$a_i = k$$$ верны, а остальные нет. Такое может быть, если утверждений, для которых $$$a_i=k$$$ ровно $$$k$$$. Посчитаем для каждого $$$k$$$, сколько всего утверждений, в которых $$$a_i = k$$$, после чего переберем подходящие $$$k$$$ и выберем максимальное.

Отдельной проблемой для многих участников стал случай, когда ответ равен 0. Это возможно, если ни один ответ больше 0 не может быть правильным, и при этом нет утверждений, в которых $$$a_i = 0$$$. Если же у нас есть утверждения, в которых $$$a_i = 0$$$, то ответ 0 также не может быть правильным, поэтому надо вывести $$$-1$$$.

Пример кода на языке Python:

n = int(input())

Задача ----------------

Пример кода на языке Python:

n = int(input())

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru4 Russian pashka 2019-11-18 22:42:49 4238 (опубликовано)
ru3 Russian pashka 2019-11-18 14:30:49 968 Мелкая правка: '---------- \n\nВ этой' -> '----------\n\nВ этой'
ru2 Russian pashka 2019-11-18 14:23:28 279
ru1 Russian pashka 2019-11-18 14:22:47 1955 Первая редакция (сохранено в черновиках)