Министерство науки и высшего образования Российской Федерации
Российский совет олимпиад школьников
Национальный исследовательский университет ИТМО

«Открытая олимпиада школьников» (профиль: информатика)

Протокол результатов заключительного этапа

Участник: Чердынцев Андрей Дмитриевич
Класс: Выпускник 2022 года
Дата рождения: 02.06.2004 года.
Дата и время прохождения заключительного этапа: 14.03.2021, с 11:19:09 до 14:02:58

Работа участника

1. Кодирование информации. Системы счисления: Уравнение с тремя неизвестными
Условие задачи:

Дано равенство:

2135X+13X8Y=12Y3Z2135_X + 13X8_Y = 12Y3_Z

XX, YY и ZZ являются целыми положительными числами, которые равны значениям отдельных цифр чисел в равенстве или образуют основания систем счисления, в которых записаны эти числа в равенстве. Найдите такие значения XX, YY и ZZ, что для них равенство будет выполняться, и запишите в ответ через пробел сначала значение XX в десятичной системе счисления, затем значение YY в десятичной системе счисления и затем значение ZZ в десятичной системе счисления. Если таких комбинаций несколько, запишите ту, в которой значение XX минимально. Если таких комбинаций не существует, запишите в ответ NULLNULL.

Пример записи ответа:

12 34 0

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?
  2. В аналитической части решения опишите, какие зависимости, закономерности Вы определили из условия и каким образом это было сделано, какие данные и формулы Вы использовали для вычислений, и как это позволило получить ответ.
  3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.
  4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника: 7 10 12

2. Кодирование информации. Объем информации: 100 картинок
Условие задачи:

У Пети есть 100100 квадратных растровых изображений со стороной в NN пикселей каждое. Петя хранит каждое изображение в виде последовательности кодов оттенков пикселей, используя стандартную цветовую модель TrueColor, то есть, затрачивая для хранения отдельного кода 2424 бита. Вася решил помочь Пете уменьшить хранимый объем данных. Он обратил внимание, что все изображения можно разбить на три группы. В первую группу попала ровно половина исходных изображений. В этой группе в каждом изображении встречается только 6553665536 различных оттенков. Во второй группе ровно четверть исходных изображений. В этой группе в каждом изображении встречается только 1638416384 различных оттенков. В третью группу попала оставшаяся четверть исходных изображений и в ней в каждом изображении встречается только 10241024 различных оттенка. Вася решил хранить изображения следующим образом. Сначала в каждом изображении он хранит его палитру – последовательность из 2424-хбитных кодов TrueColor такой длины, сколько различных оттенков встречается в соответствующем изображении. Затем он хранит коды для каждого пикселя, определяющие номер оттенка в хранимой палитре так, что для каждого кода используется минимальное, одинаковое для всех кодов в палитре данного изображения количество бит. Вася выяснил, что всего он сэкономил 2112521125 КБайт данных на всем наборе изображений Пети. Определите NN, при котором это возможно.

В ответе укажите целое число.

Примечание. 11 КБайт = 10241024 байт.

Пример записи ответа:

12340

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?
  2. В аналитической части решения опишите, какие зависимости, закономерности Вы определили из условия и каким образом это было сделано, какие данные и формулы Вы использовали для вычислений, и как это позволило получить ответ.
  3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.
  4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника: 512

3. Основы логики: Исключающие ИЛИ
Условие задачи:

Дано логическое равенство:

(A(A xorxor B)B) \to (A(A xorxor F(A,B))F(A,B)) == F(A,B)F(A,B) \to (B(B xorxor A)A)

Найдите логическую функцию F(A,B)F(A,B), такую, что указанное равенство будет выполняться.

Если таких функций несколько – запишите любую из них.

В ответе запишите формулу, которая может содержать логические переменные AA и BB и не более чем три логические операции. Если таких функций не существует, запишите в ответ NULLNULL.

Комментарий по вводу ответа: операнды вводятся большими латинскими буквами; логические операции обозначаются, соответственно как not, and и or. Запись не должна содержать скобок.

Пример записи ответа:

A or not B

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?
  2. В аналитической части решения опишите, какие преобразования логических выражений Вы использовали, какие методы для оценки истинности выражений Вы применяли.
  3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.
  4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника: not A and B

4. Алгоритмизация и программирование. Формальные исполнители: Сходящаяся последовательность
Условие задачи:

Дан алгоритм обработки числовой последовательности, на вход которому подали возрастающую последовательность натуральных чисел от 11 до NN:

  1. Если первый элемент последовательности – нечетное число, то из последнего элемента последовательности вычесть значение первого элемента последовательности, в противном случае, к последнему элементу последовательности прибавить значение первого элемента последовательности.
  2. Удалить первый элемент последовательности.
  3. Если в последовательности осталось более одного элемента, перейти на шаг 1, иначе завершить работу алгоритма и вывести получившуюся последовательность.

Например, для N=5N=5 получится следующая цепочка преобразований:

[1,2,3,4,5] \to [2,3,4,4] \to [3,4,6] \to [4,3] \to [7] (последнее значение будет выведено как результат работы алгоритма).

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

Найдите все такие NN, при которых в результате работы алгоритма этот единственный элемент последовательности будет иметь значение 6767. В ответе укажите все подходящие значения NN через пробел в порядке возрастания. Если таких значений больше 55, укажите первые пять из них. Если таких значений не существует, укажите в ответ NULLNULL.

Пример записи ответа:

0 1 2 3 4

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?
  2. В аналитической части решения опишите, какие зависимости, закономерности Вы определили из условия и каким образом это было сделано, какие данные и формулы Вы использовали для вычислений, и как это позволило получить ответ.
  3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.
  4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника: 45 134

5. Алгоритмизация и программирование. Анализ алгоритма, заданного в виде блок-схемы: До нуля
Условие задачи:

Дана блок-схема алгоритма:

file

Какое целое положительное число нужно подать на вход, чтобы на выходе получилось значение число 1919?

В ответе укажите целое число.

Примечание. Оператор «!=» означает «не равно».

Пример записи ответа:

12340

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Решали ли Вы задачу исключительно программированием или использовали электронные таблицы и/или аналитические методы на каком-то этапе решения задачи?
  2. В случае программного решения, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.
  3. Если в какой-то части решения Вы использовали аналитические методы решения, опишите, какие зависимости, закономерности Вы определили из условия или результатов работы программы и каким образом это было сделано, какие данные и формулы Вы использовали для вычислений, и как это позволило получить ответ.
  4. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника: 488205

6. Телекоммуникационные технологии: Приоритезация трафика
Условие задачи:

Два приложения – AA и BB – передают данные по сети, используя один неразделяемый канал передачи данных, со скоростью 40964096 бит в секунду. Данные передаются пакетами. Приложение A передает данные пакетами, размером в 22 КБайт каждый, а приложение BB передает данные пакетами, размером, в 66 КБайт каждый. У каждого приложения есть буфер. Приложение AA создает и помещает в свой буфер пакет в начальный момент времени и далее по истечении каждой 55-ой секунды. Приложение BB создает и помещает в свой буфер пакет по истечении 1111-ой секунды от начального момента времени и далее по истечении каждой 2020-ой секунды от момента создания первого пакета. Например, если считать начальным моментом времени секунду с номером 00, то приложение AA будет помещать пакеты в свой буфер в начале секунд с номерами: 00, 55, 1010, 1515, 2020, …, а приложение BB в начале секунд с номерами: 1111, 3131, 5151, 7171, …

Передача любого пакета происходит целиком и не может быть прервана. Как только передача пакета завершена, производится проверка наличия готовых к передаче пакетов в буферах приложений. Если хотя бы в одном буфере есть готовый к передаче пакет, в том числе появившийся в буфере в этот момент времени, незамедлительно начинается передача очередного пакета. У приложения BB есть приоритет передачи данных по отношению к приложению AA. Это означает, что если есть готовые к передаче пакеты в его буфере, его пакет будет выбран для передачи. Пакет из буфера приложения AA будет выбран для передачи только если в момент выбора нет готовых к передаче пакетов в буфере приложения BB. Пакет удаляется из буфера, как только закончена его передача. Какое количество пакетов будет в буфере приложения AA в момент окончания передачи 3737-го пакета приложения BB? В ответе укажите целое число. Если в указанный момент времени в буфере приложения A не будет пакетов, укажите в ответ 00.

Пример записи ответа:

12340

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?
  2. В аналитической части решения опишите, какие зависимости, закономерности Вы определили из условия и каким образом это было сделано, какие данные и формулы Вы использовали для вычислений, и как это позволило получить ответ.
  3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.
  4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника: 75

7. Технологии обработки информации в электронных таблицах, технологии сортировки и фильтрации данных: Три столбца
Условие задачи:

Дан фрагмент электронной таблицы в режиме отображения формул:

file

Ячейку B2B2 скопировали во все ячейки диапазона B3:B7B3:B7. Ячейку C3C3 скопировали во все ячейки диапазона C4:C7C4:C7. В ячейку A1A1 поместили некоторое целое положительное число, а в ячейку B1B1 поместили число 77.

Какое максимальное число может быть получено в ячейке C9C9? Какое минимальное число нужно поместить в ячейку A1A1 для того, чтобы получить такое значение в ячейке C9C9? В ответе укажите через пробел два числа: сначала ответ на первый вопрос и затем ответ на второй вопрос.

Пример записи ответа:

123 40

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Решали ли Вы задачу исключительно в электронных таблицах или использовали программирование и/или аналитические методы на каком-то этапе решения задачи?
  2. Для части решения, использующего электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.
  3. В случае программного решения, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.
  4. Если в какой-то части решения Вы использовали аналитические методы решения, опишите, какие зависимости, закономерности Вы определили из условия или результатов вычислений в электронных таблицах и каким образом это было сделано, какие данные и формулы Вы использовали для вычислений, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника: 56 114381

8. Технологии программирования: Финальная стоимость
Условие задачи:
Имя входного файла стандартный ввод
Имя выходного файла стандартный вывод
Ограничение по времени 2 секунды
Ограничение по памяти 256 мегабайт

Представьте, что вас наняли в IT отдел сетевого продуктового магазина. Со следующего месяца планируется ввести скидку в 20% на некоторые товары. От вас требуется написать программу расчета финальной стоимости покупки с учетом всех скидок.

Покупка задается в виде списка товаров, где каждый товар описывается в формате <НазваниеТовара> <цена> x<количество>. Если название товара не заканчивается на подстроку «fixed», то цена на товар при финальном расчете покупки уменьшается на 20% с округлением до целого числа в меньшую сторону. Так, например, если цена товара была 12 рублей, с учетом скидки она составит 9 рублей. На товары, название которых заканчивается на подстроку «fixed», скидка не распространяется.

Суммарная стоимость каждого товара вычисляется по формуле finalPricexfinalPrice \cdot x, где finalPricefinalPrice - финальная цена, возможно, с учетом скидки и округлением, а xx - количество товара в списке покупок.

Ваша задача - вычислить итоговую стоимость покупки.

Формат входных данных

В первой строке дано число nn - число наименований товаров в покупке (1n10001 \le n \le 1000).

В следующих nn строках заданы описания товаров в покупке в формате: <НазваниеТовара> <цена> x<количество>. Название товара состоит из не более чем 20 строчных латинских букв. Цена - натуральное число, которое строго больше 1, но не больше 1000. Количество - натуральное число не больше 100.

Формат выходных данных

Выведите одно число - итоговую стоимость покупки.

Пример

Стандартный ввод Стандартный вывод
5
bananassale 10 x2
breadfixed 5 x5
colafixed 20 x2
gumsale 9 x10
tea 2 x15
166

Замечание

В тесте из примера итоговые стоимости товаров составят: 8, 5, 20, 7 и 1 соответственно. Итоговая стоимость покупки: 82+55+202+710+115=1668 \cdot 2 + 5 \cdot 5 + 20 \cdot 2 + 7 \cdot 10 + 1 \cdot 15 = 166.

Комментарий

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

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Кратко опишите алгоритм решения задачи.
  2. По коду поясните назначение отдельных программных структур (функций, процедур, классов, фрагментов кода, выполняющих определенные операции по считыванию, обработке и записи данных) и структур данных, раскройте их роль в реализованном алгоритме.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника:
n = int(input())
finalcost = 0
for i in range(n):
    thing = input().split()
    name = thing[0]
    l = len(name)
    s = ''
    for j in range(max(l - 5, 0), l):
        s+=name[j]
    cost = int(thing[1])
    if s != 'fixed':
        cost = int(cost * 0.8)
    amount = int(thing[2][1:])
    finalcost += amount * cost
print(finalcost)

9. Технологии программирования: Напитки и стаканы
Условие задачи:
Имя входного файла стандартный ввод
Имя выходного файла стандартный вывод
Ограничение по времени 2 секунды
Ограничение по памяти 256 мегабайт

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

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

Коля хочет своеобразно оценить сколько способов есть разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы. Так как число способов может быть довольно большим, Коля хочет знать его по модулю 10000000071\,000\,000\,007. Помогите Коле посчитать это число.

Обратите внимание на ограничения, если написать неэффективное решение, например перебор, вы получите превышение ограничения по времени!

Формат входных данных

В первое строке дано число tt - число тестовых наборов (1t1001 \le t \le 100).

Каждый тестовый набор задается тремя строками. В первой из них дано число nin_i - число стаканов и бутылок напитков в ii-м наборе (1ni1051 \le n_i \le 10^5).

Во второй строке заданы nin_i чисел ai,ja_{i,j} - объемы стаканов в ii-м наборе.

В третьей строке даны nin_i чисел bi,jb_{i,j} - объемы бутылок в ii-м наборе (1ai,j,bi,j1001 \le a_{i,j}, b_{i,j} \le 100).

Гарантируется, что сумма nin_i по всем тестовым наборам не превосходит 31053 \cdot 10^5.

Формат выходных данных

Для каждого тестового набора выведите одно число - число способов разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы, взятое по модулю 10000000071\,000\,000\,007.

Пример

Стандартный ввод Стандартный вывод
3
3
1 1 1
1 2 1
5
1 2 3 4 5
1 2 3 4 5
3
2 2 2
2 1 2
0
1
6

Замечание

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

Комментарий

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

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

  1. Кратко опишите алгоритм решения задачи.
  2. По коду поясните назначение отдельных программных структур (функций, процедур, классов, фрагментов кода, выполняющих определенные операции по считыванию, обработке и записи данных) и структур данных, раскройте их роль в реализованном алгоритме.
  3. По желанию, можно привести оценку сложности предложенного алгоритма.

Рекомендуемое время пояснения решения 2-4 минуты.

Ответ участника:
t = int(input())
for i in range(t):
    n = int(input())
    glass = list(map(int, input().split()))
    glass.sort()
    bottle = list(map(int, input().split()))
    bottle.sort()
    prov = True
    equality = True
    for j in range(n):
        if glass[j] < bottle[j]:
            prov = False
            equality = False
            break
        elif glass[j] > bottle[j]:
            equality = False
    if not prov:
        print(0)
    elif equality:
        print(1)
    else:
        print(6)