P
pro·school.ru
Каталог школ
💻 ВсОШ · Пригласительный этап · 2023/2024

Олимпиада по информатике 6–7 классыпригласительный этап ВсОШ 2023/2024: задания и ответы

Официальный комплект пригласительного этапа Всероссийской олимпиады школьников по информатике для 6–7 классов (2023/2024 учебный год). Задания и решения с критериями оценивания — скачайте PDF или прорешайте онлайн по тексту ниже.

Просмотр PDF: ЗаданияОткрыть в новой вкладке ↗

Задания — текст для прорешивания

Текст извлечён из официального PDF автоматически: формулы, таблицы и рисунки могут отображаться неточно — сверяйтесь с документом выше.

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023

Задача 1. Сложение Оксана прибавляет к числу его последнюю цифру и вычитает первую. Назовём такое действие операцией. К полученному числу она снова прибавляет его последнюю цифру и вычитает первую, затем прибавляет к результату его последнюю цифру и вычитает первую и т.д. Оксана начала с числа 12 и после первой операции получила число 13 (12 + 2 − 1), потом 15 (13 + 3 − 1), 19, 27 и так далее. Ответьте на следующие вопросы. Во всех случаях выполнение операций начинается с числа 12. 1. Какое число получится после 8 операций? 2. Какое наибольшее число можно получить, если количество операций не ограничено? 3. Какое число получится после 1024 операций? 4. Сколько раз за время 1024 операций встретится круглое число (оканчивающееся на 0)?

Страница 1 из 8

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023

Задача 2. Вешалка Молодой предприниматель Тимофей организовал производство и реализацию такой нужной для любого домашнего гардероба продукции, как вешалка для брюк. Поскольку конкуренция на этом рынке велика, Тимофей решил проявить клиентоориентированность и предложил потенциальным покупателям самим выбирать наиболее подходящие для использования размеры этого предмета. Неизменным остаётся только одно – расстояния между горизонтальными перекладинами и размеры крючка всегда равны 1.

По выбранным клиентом ширине w и количеству горизонтальных перекладин h (на рисунке выделены красным цветом) вешалки определите длину проволоки, необходимой для производства одного изделия. Обратите внимание на то, что ширина самой верхней перекладины на 1 меньше остальных. Ответом на эту задачу является некоторое выражение, которое может содержать целые числа, переменные w и h (обозначаются английскими буквами), операции сложения (обозначаются +), вычитания (обозначаются −), умножения (обозначаются ∗) и круглые скобки. Запись вида 2h для обозначения произведения числа 2 и переменной h некорректна, нужно писать 2 ∗ h. Ваше выражение должно давать правильный ответ для любых натуральных значений w > 2 и h > 1. Например, для приведённых на первом рисунке w = 7 и h = 2 значение выражения должно быть равно 25, а для приведённых на втором рисунке w = 7 и h = 3 значение выражения должно быть равно 33. Пример правильной формы записи ответа: w ∗ w − 2 ∗ (h − 1)

Страница 2 из 8

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023

Задача 3. Связь на уровне Залина и Алан не могут ни секунды прожить без разговоров и не хотят прерывать звонок, даже пока идут навстречу друг другу. Их путь проходит через холмистую местность, но мобильная связь в этом районе работает только тогда, когда оба собеседника находятся на одинаковой высоте. Помогите Залине и Алану встретиться, не прерывая звонок. Путь между Залиной и Аланом имеет форму ломаной (по оси абсцисс отложена горизонтальная координата, ось ординат отражает высоту местности в данной точке):

В начале пути Залина находится на левом конце ломаной, Алан — на правом. За один ход Залина и Алан с одинаковой скоростью проходят расстояние в одну клетку налево или направо, перемещаясь по ломаной. Залина и Алан могут двигаться в разные стороны или не двигаться вовсе. Постройте маршрут, который позволит Залине и Алану встретиться, оставаясь на одинаковой высоте на всём протяжении пути. Чем меньше ходов потребуется при этом, тем больше баллов вы получите. Ответ запишите в виде нескольких строк, состоящих из двух символов каждая. Первый символ — ход Залины, второй — ход Алана. Символ «<» (знак «меньше») означает движение налево, символ «>» (знак «больше») — движение направо, символ «=» (знак равенства) — отсутствие движения персонажа на данном ходе. Одна строка соответствует одному перемещению Залины и Алана. Собеседники не могут выходить за пределы заданной ломаной. Например, следующий ответ: >< => означает, что на первом ходе Залина движется направо, Алан — налево. На втором ходе Залина стоит на месте, а Алан движется направо. Этот ответ не может быть началом правильного решения, потому что на втором ходе Залина и Алан окажутся на разной высоте.

Страница 3 из 8

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023

Задача 4. Билеты на поезд На олимпиаду по информатике в другой город едут 100 школьников, для которых нужно приобрести билеты на поезд. Все школьники должны приехать одним поездом, при этом олимпиада начинается 20 апреля. Поэтому из всех подходящих поездов нужно выбрать тот, который приезжает как можно позже, но не позднее 20-го апреля. Если таких поездов несколько, то требуется выбрать тот поезд, на который получится приобрести 100 билетов по минимальной суммарной стоимости. Для решения этой задачи вам понадобится файл с электронной таблицей, содержащей сведения о поездах и имеющихся в продаже билетах. Скачать файл в формате Microsoft Excel (xlsx), скачать файл в формате Open Document Spreadsheet (ods). В столбце A содержится номер поезда. В столбце B записана дата прибытия поезда, число n в этом столбце обозначает, что поезд прибывает n-го апреля. Все поезда прибывают приблизительно в одно и то же время, поэтому имеет значение только дата прибытия, но не точное время. Количество билетов на поезд указано в столбце C, а их цена — в столбце D. Одному поезду в этой таблице может соответствовать несколько строк, поскольку в одном поезде могут быть билеты разной стоимости. В таком случае значения в столбцах А и В этих строк будут совпадать. Вам нужно выбрать поезд так, чтобы в нём было хотя бы 100 свободных мест (возможно, по разным ценам), и он прибывает не позднее 20 числа. Среди таких поездов нужно выбрать тот, который прибывает как можно позже. Если несколько подходящих поездов прибывают в один день, то среди них необходимо выбрать поезд, 100 билетов на который обойдутся дешевле остальных. Гарантируется, что после этого ответ будет однозначным. Заполните таблицу с характеристиками выбранного вами поезда. Дата прибытия поезда. Номер выбранного поезда. Минимальная стоимость 100 билетов

Страница 4 из 8

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023

Задача 5. Долгая тренировка Ограничение по времени:

1 секунда

Женя готовится к городским спортивным соревнованиям, где хочет показать себя самым сильным. Он тренируется по системе шаолиньских монахов. Тренировка должна состоять из N подходов, каждый из которых длится M минут и S секунд, между каждой парой подряд идущих подходов должен быть перерыв длительностью P секунд. Помогите Жене определить, сколько всего времени займёт тренировка.

Формат входных данных Первая строка содержит целое число N (1 ⩽ N ⩽ 100) — количество подходов. Вторая строка содержит целое число M (0 ⩽ M ⩽ 59) — количество минут в одном подходе. Третья строка содержит целое число S (0 ⩽ S ⩽ 59) — количество секунд в одном подходе. Четвёртая строка содержит целое число P (0 ⩽ P ⩽ 120) — длительность паузы между подходами, выраженная в секундах. Гарантируется, что один подход занимает ненулевое время.

Формат выходных данных Выведите два целых числа — продолжительность тренировки в минутах и секундах. Первое число должно быть равно количеству полных минут в тренировке. Второе число — количеству секунд в тренировке, находящемуся в диапазоне от 0 до 59 включительно.

Пример стандартный ввод 4 3 24 70

стандартный вывод 17 6

Замечание В примере из условия Жене нужно выполнить 4 подхода, каждый из которых имеет длительность 3 минуты 24 секунды. При этом между походами у него будет 3 перерыва, каждый из которых имеет длительность 70 секунд. Следовательно, вся тренировка займёт 17 минут и 6 секунд.

Страница 5 из 8

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023

Задача 6. Переключая каналы Ограничение по времени:

0.5 секунд

Родители Лизы подключили пакет, содержащий N телевизионных каналов, пронумерованных числами от 1 до N . Переключать каналы можно с помощью двух кнопок на пульте: «+» и «−». Короткое нажатие на кнопку «+» приведёт к переключению на следующий канал, если номер текущего канала меньше N ; если же номер текущего канала равен N , то телевизор продолжит показывать этот канал. Если кнопку «+» нажать и удерживать некоторое время, произойдёт переход на K каналов вперёд, при условии, что номер текущего канала не превосходит N − K. В противном случае произойдёт переход на канал N . Аналогично, короткое нажатие на кнопку «−» приведёт к переключению на предыдущий канал, если номер текущего канала больше 1; если же номер текущего канала равен 1, телевизор продолжит показывать этот канал. Если кнопку «−» нажать и удерживать некоторое время, то произойдёт переход на K каналов назад при условии, что номер текущего канала превышает K. В противном случае произойдёт переход на канал 1. Лиза включила телевизор и обнаружил, что он показывает канал P . Лиза знает, что очень скоро по каналу с номером U начнётся интересная передача. Определите, какое минимальное количество нажатий на кнопки пульта потребуется сделать Лизе, чтобы переключиться на канал U .

Формат входных данных В первой строке содержится целое число N (3 ⩽ N ⩽ 109 ) — количество телевизионных каналов. Во второй строке содержится целое число K (2 ⩽ K < N ) — количество каналов, на которое осуществится переход назад или вперёд при удерживании соответствующей кнопки переключения. В третьей строке содержится целое число P (1 ⩽ P ⩽ N ) — номер канала, который показывает телевизор. В четвёртой строке содержится целое число U (1 ⩽ U ⩽ N ) — номер канала, на который желает переключиться Лиза. Гарантируется, что P 6= U .

Формат выходных данных Выведите одно целое неотрицательное число — минимальное количество нажатий на кнопки пульта, которое необходимо для переключения с канала P на канал U .

Система оценки Решения, правильно работающие при P < U , N ⩽ 100, будут оцениваться в 24 балла. Решения, правильно работающие при N ⩽ 100, будут оцениваться в 48 баллов.

Страница 6 из 8

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023

Примеры стандартный ввод

стандартный вывод

20 5 3 19

20 5 3 17

20 5 14 12

20 5 3 16

Замечание В первом примере Лизе следует сначала выполнить одно короткое нажатие на кнопку «+» и переключиться с канала 3 на канал 4, а затем трижды осуществить переход вперёд на 5 каналов: сначала переключиться с 4 на 9, затем с 9 на 14 и, наконец, с 14 на 19 канал. Во втором примере Лиза может сначала переключиться коротким нажатием на кнопку «−» на канал 2, после чего выполнить три перехода вперёд на 5 каналов: с канала 2 на канал 7, затем на канал 12 и, наконец, на канал 17. В третьем примере Лиза дважды выполнит короткое нажатие кнопки «−». В четвёртом примере Лизе нужно сначала перейти назад, на канал 1, после чего трижды выполнить переход вперёд, последовательно на каналы 6, 11, 16.

Страница 7 из 8

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023

Задача 7. Обработка заявлений Ограничение по времени:

1 секунда

На столе у большого начальника лежит стопка из N заявлений, пронумерованных сверху вниз от 1 до N . Первое заявление он подписывает и убирает из стопки, второе — выбрасывает в мусорную корзину, третье — кладёт вниз стопки. Далее процесс продолжается аналогично, пока заявления в стопке не закончатся. Определите, будет ли заявление с номером K подписано или выброшено, а также номер шага, на котором это произойдёт. Одним шагом является каждая из трёх операций, описанных выше.

Формат входных данных Первая строка входных данных содержит целое число N , вторая строка — целое число K (1 ⩽ N ⩽ 109 , 1 ⩽ K ⩽ N ).

Формат выходных данных В первой строке выведите «Yes», если заявление с номером K будет подписано, и «No», если оно будет выброшено. Во второй строке выведите номер шага, на котором это произойдёт.

Система оценки Решения, правильно работающие при N ⩽ 1000, будут оцениваться в 40 баллов. Решения, правильно работающие при N ⩽ 5 · 105 , будут оцениваться в 60 баллов.

Примеры стандартный ввод

стандартный вывод

4 3

No 5

5 3

Yes 7

Замечание В первом примере из условия в стопке находятся 4 заявления: (1, 2, 3, 4). Заявление 1 подписывается, заявление 2 выкидывается, заявление 3 перекладывается в конец. После выполнения трёх шагов в стопке будут заявления (4, 3). Поэтому на пятом шаге заявление 3 будет выброшено. Во втором примере из условия стопка имеет вид (1, 2, 3, 4, 5). После выполнения трёх шагов стопка будет иметь вид (4, 5, 3). За следующие три шага заявление 4 будет подписано, заявление 5 будет выброшено, а заявление 3 — переложено в конец стопки (в которой ничего не будет, кроме заявления 3). Поэтому после шести шагов стопка будет иметь вид (3). На седьмом шаге заявление 3 будет подписано.

Страница 8 из 8

Ответы и решения — показать

Официальные ответы и критерии оценивания жюри. Сначала решите задания самостоятельно.

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023 Разбор задач

Задача 1. Сложение

Вопрос 1. Ответ: 36 (можно посчитать, выписав первые 8 операций). Вопрос 2. Выпишем результаты выполнения операций: 12, 13, 15, 19, 27, 32, 31, 29, 36, 39, 45, 46, 48, 52, 49, 54, 53, 51, 47, 50, 45, ... Число 45 встретилось в этой последовательности повторно, значит, дальше будет повторяться фрагмент последовательности из 10 чисел. Ответом на второй вопрос является максимальное из выписанных чисел, то есть 54. Вопрос 3. Так как длина цикла равна 10, то 1024-е число в последовательности будет совпадать с 14-м (4-е число не подходит, т.к. оно находится вне цикла). Это число 49. Вопрос 4. В первых 10 числах до цикла круглых чисел нет, а в цикле лишь одно такое число — 50, стоящее на последней позиции. Значит, ответ на вопрос – количество полных циклов среди первых 1024 чисел. Оно равно 101 (нужно из 1024 вычесть 10 чисел вне цикла, результат поделить нацело на 10).

Задача 2. Вешалка

Вешалка состоит из h горизонтальных линий длины w и ещё одной горизонтальной линии длины w − 1, а также из h − 1 вертикальных линий длины 1 и ещё трёх отрезков длиной 1, 1 и 2. После упрощения получается следующее выражение: h∗w+h+w+2 Ответ можно записать в виде любого выражения, эквивалентного данному.

Задача 3. Связь на уровне

Рассмотрим промежуточную точку, расположенную на высоте 0 около правого края. Алан находится ближе к ней, значит, когда мальчик будет находиться в этой точке, Залина тоже должна оказаться на высоте 0, то есть она должна вернуться в начало пути. Будем перемещать Алана налево, при этом перемещая Залину так, чтобы она оставалась вблизи левого конца кривой: >< >< >< << << >< << << Теперь Залина и Алан начинают двигаться друг навстречу другу. Залина должна пройти “пик” высоты 3, поэтому ей придётся пропустить один ход, пока Алан не доберётся до ближайшего к нему пику такой же высоты. >< >< =< >< Они спускаются вниз, и Залина поднимается на следующий пик высоты 3. >> >< Теперь Залина должна спуститься до высоты 1. Поэтому Алану придётся вернуться на три шага назад на такую же высоту. Страница 1 из 5

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023 >> => >> Далее они поднимаются до высоты 3, после чего Залине вновь нужно пропустить один ход, чтобы дать Алану возможность спуститься до высоты 2. >< =< >< << Наконец, Залина и Алан уверенно движутся навстречу друг другу, проходя “пики” высоты 4, а затем спускаясь до высоты 2 посередине между ними. >< >< >< ><

Задача 4. Билеты на поезд

Задачу можно решать различными способами. Сначала, используя фильтр или сортировку, оставим только поезда, которые прибывают не позднее 20 числа. Затем удобно составить список уникальных номеров этих поездов и скопировать его на отдельный лист. Теперь для каждого поезда подсчитаем, сколько на него имеется билетов, для чего можно использовать функцию COUNTIF. Самая поздняя дата прибытия поездов, на которые есть 100 билетов — 16 апреля. Оставим только прибывающие 16 числа поезда, на которые есть 100 билетов. Их не очень много. Дальнейшие действия уже получится выполнить не общими формулами, а небольшими правками исходных данных. Например, отсортировать оставшиеся поезда по номеру, во вторую очередь — по цене билета, и уменьшить количество билетов на каждый из оставшихся поездов так, чтобы на этот поезд осталось ровно 100 билетов. Уменьшать надо количество самых дорогих билетов. После этого можно при помощи функции SUMPRODUCT подсчитать стоимость 100 билетов на каждый поезд. Минимальное значение этой стоимости будет достигаться для поезда 977 и оно равно 247860.

Задача 5. Долгая тренировка

Чтобы определить общую длительность всех подходов в секундах, необходимо выразить в секундах длительность одного подхода (умножив количество минут M на 60 и прибавив к этому количество секунд S) и умножить на количество подходов N . Между подходами будет N − 1 перерыв, каждый из которых длится P секунд, поэтому общая длительность перерывов находится по формуле (N − 1) · P . Исходя из вышеизложенного, общая длительность тренировки в секундах составит N · (M · 60 + S) + (N − 1) · P . Результат можно выразить в минутах/секундах, поделив общее количество секунд на 60. Число минут будет равно целочисленной части результата деления, число секунд — остатку от деления Описанные рассуждения запишем в виде следующего кода на языке программирования Python. n = int ( input ( ) ) m = int ( input ( ) ) s = int ( input ( ) ) p = int ( input ( ) ) f u l l _ t i m e = n ∗ (m ∗ 60 + s ) + ( n − 1 ) ∗ p Страница 2 из 5

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023 print ( f u l l _ t i m e // 6 0 ) print ( f u l l _ t i m e % 6 0 )

Задача 6. Переключая каналы

Рассмотрим сначала случай P < U и разберём все принципиально различающиеся случаи переключения с канала P на канал U . Ради краткости для обозначения нажатия и удерживания кнопки переключения будем использовать термин «длинное нажатие». Также используем обозначения // для целочисленного деления и % для взятия остатка от деления (как в языке Python). Для решения задачи в случае, когда P > U , достаточно поменять местами значения P и U , так как все операции увеличения и уменьшения номера канала симметричны. Есть следующие способы достижения из канала P канала U . 1. Сначала выполняем длинные, затем короткие нажатия на кнопку «+». В этом случае наилучший вариант — выполнить (U − P )//K длинных нажатий и (U − P )%K коротких. 2. Сначала выполняем длинные нажатия на кнопку «+», затем короткие нажатия на кнопку «−». В этом случае нужно «перепрыгнуть» через канал U , выполнив на одно длинное нажатие больше, чем в предыдущем случае, затем вернуться назад, выполнив K −(U −P )%K коротких нажатий. 3. Сначала при помощи длинных нажатий на кнопку «−» достигнем канала номер 1, для чего понадобится d PK−1 e нажатий (частное, округлённое вверх), а затем нужно, начав с канала 1, достичь канала U , что можно сделать одним из двух способов, описанных ранее. 4. Сначала при помощи длинных нажатий на кнопку «+» достигнем канала номер N , для чего −P понадобится d NK e нажатий (частное, округлённое вверх), а затем нужно, начав с канала N , достичь канала U , что можно сделать двумя возможными способами. Пример решения на языке Python. В этом решении функция solve возвращает ответ для первых двух случаев, меняя местами p и u в случае p > u. Далее в основной программе рассматриваются все варианты, при этом результат для случаев 1 и 2 находится вызовом solve(p, u), третий случай — (p - 1 + k - 1) // k + solve(1, u), четвёртый случай — (n - p + k - 1) // k + solve(n, u). Из всех полученных значений выбирается наименьшее. n = int ( input ( ) ) k = int ( input ( ) ) p = int ( input ( ) ) u = int ( input ( ) ) def s o l v e ( p , u ) : if p > u: p, u = u, p dist = (u − p) l o n g _ p r e s s e s = d i s t // k ans1 = l o n g _ p r e s s e s + d i s t % k ans2 = ( l o n g _ p r e s s e s + 1 ) + ( k − d i s t % k ) return min( ans1 , ans2 ) ans = min( s o l v e ( p , u ) , ( p − 1 + k − 1 ) // k + s o l v e ( 1 , u ) , ( n − p + k − 1 ) // k + s o l v e ( n , u ) ) print ( ans ) Для небольших значений N задача решается с помощью алгоритма поиска в ширину или динамического программирования. Основная идея состоит в том, чтобы установить связи между каналами: Страница 3 из 5

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023 два канала считаются связанными, если их отделяет друг от друга ровно одно нажатие — длинное или короткое (де-факто можно говорить о построении графа). Далее, выбрав в качестве стартовой точки канал P , следует пройти по связям, находя кратчайшие пути до каждого канала (в том числе и до канала U ). Однако такие решения для больших N потребуют слишком больших затрат времени и памяти. Пример решения, использующего алгоритм обхода графа в ширину (BFS): n = int ( input ( ) ) k = int ( input ( ) ) s = int ( input ( ) ) f = int ( input ( ) ) INF = n + 1 d i s t = [ INF ] ∗ ( n + 1 ) dist [ s ] = 0 q = [s] while d i s t [ f ] == INF : u = q . pop ( 0 ) fo r v in ( u + 1 , u − 1 , u + k , u − k ) : if v < 1: v = 1 if v > n: v = n i f d i s t [ v ] == INF : dist [v] = dist [u] + 1 q . append ( v ) print ( d i s t [ f ] )

Задача 7. Обработка заявлений

Для n ⩽ 1000 или n ⩽ 105 задача решается простым моделированием сложности O(n2 ) и O(n) соответственно. Нужно создать список из всех заявлений, затем в цикле с первым заявлением из списка выполнять одну из трёх операций. Отличие решений по сложности заключается в том, как реализовать удаление первого элемента из списка. Если в языке Python для этого использовать метод pop(0), то одно такое удаление будет выполняться за O(n), а общая сложность будет O(n2 ). Для уменьшения сложности до O(n) нужно использовать структуру данных «очередь» или «дек» или реализовать «ленивое удаление», то есть не удалять элемент, а просто увеличивать на 1 индекс элемента, который является первым в списке. Пример решения сложности O(n) с «ленивым удалением». n = int ( input ( ) ) k = int ( input ( ) ) a = [ i + 1 fo r i in range ( n ) ] i = 0 while i < len ( a ) : i f a [ i ] == k and i % 3 == 0 : print ( " Yes " ) print ( i + 1 ) break e l i f a [ i ] == k and i % 3 == 1 : print ( "No" ) print ( i + 1 ) break e l i f i % 3 == 2 : a . append ( a [ i ] ) i += 1 Страница 4 из 5

Пригласительный этап всероcсийской олимпиады по информатике для 6–7 классов ОЦ «Сириус», 25-26 мая 2023 Идея полного решения заключается в том, что примерно для n/3 заявлений мы сразу же можем дать ответ, что данное заявление будет подписано (и это случится на k-м шаге), ещё примерно n/3 заявлений будет отброшено, и примерно n/3 заявлений будет переложено, в этом случае нужно решить задачу для нового n, уменьшенного в три раза. Причём «моделирование» обработки всей стопки заявлений можно делать за O(1) операций. Нужно только аккуратно разобраться, как происходит сведение задачи от n к n/3. Рассмотрим задачу в более общем виде — дана тройка (n, k, op), где: • n — количество заявлений, • k — порядковый номер искомого заявления, • op — какую последнюю операцию мы выполнили над заявлением (0 — переложить вниз стопки, 1 — подписать, 2 — отбросить). Эти операции повторяются по циклу: 1, 2, 0, 1, 2, 0 и т.д. Поскольку мы начинаем обрабатывать заявления с операции 1, то можно считать, что последней выполненной операцией до этого была операция 0. Определим, какая операция будет производиться над k-м по порядку заявлением. Это (op + k) mod 3 (если последней была выполнена операция op, то с первым заявлением в стопке будет выполнена операция op + 1, затем — op + 2 и т.д. с учётом зацикливания). Если значение (op + k) mod 3 равно 1 или 2, то добавляем к ответу k, выводим ответ и завершаем программу. Если же (op + k) mod 3 = 0, то добавим n к количеству шагов и перейдём к такой же точно задаче, только меньшего размера. Для этого нужно определить новые значения n, k и op. Вычислим новое n — то есть сколько заявлений переместится вниз стопки. Если op = 0, то переместятся bn/3c заявлений — мы перекладываем каждое третье заявление, то есть нам нужно найти количество нулей в последовательности 1, 2, 0, 1, 2, 0, ..., из n элементов. Если op = 1, то нам также достаточно посчитать количество нулей в последовательности 2, 0, 1, 2, 0, 1, ..., это такая же последовательность, но сдвинутая на 1, поэтому ответ будет равен b(n+1)/3c. Если op = 2, то тогда нужно посчитать количество нулей в последовательности 0, 1, 2, 0, 1, 2, ..., это такая же последовательность, но сдвинутая на 2, поэтому ответ будет равен b(n + 2)/3c. Заметим, что все три варианта можно записать одной формулой: n0 = (n + op)//3. Вычислим новое k — то есть каким по порядку будет искомое заявление после рассмотрения всех заявлений и перекладывания части из них вниз стопки. Другими словами, нужно найти количество заявлений с порядковыми номерами до k (включительно), которые переместятся вниз. Это значение также зависит от op (с какого заявления началась обработка). По аналогии с предыдущими рассуждениями получаем: k 0 = (k + op)//3. Наконец, вычислим новое op — то есть какая операция была выполнена над последним обработанным заявлением: op0 = (op + n) mod 3. В итоге мы пришли к аналогичной задаче с параметрами (n0 , k 0 , op0 ), для решения которой снова повторяем вышеописанные действия. Поскольку каждый раз остаётся примерно треть заявлений от предыдущего количества, то сложность решения O(log n). Пример решения сложности O(log n). BOTTOM, SIGN , DROP = 0 , 1 , 2 n = int ( input ( ) ) k = int ( input ( ) ) op = BOTTOM steps = 0 while ( op + k ) % 3 == BOTTOM: s t e p s += n n , k , op = ( n + op ) // 3 , ( k + op ) // 3 , ( n + op ) % 3 print ( " Yes " i f ( op + k ) % 3 == SIGN e l s e "No" ) s t e p s += k print ( s t e p s )

Страница 5 из 5

Видеоразборы заданий

Теория к заданиям: информатика, 6 класс

Пригласительный этап 2023/2024 — другие классы

Все классы →

Олимпиада по информатике 6 класс — другие годы и этапы

Все комплекты →