Задачи муниципального этапа олимпиады школьников по информатике 2023
1. Игра в кубики (все классы)
Ограничения: время – 200ms/500ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Алиса и Боб играют, бросая две игральные кости (два кубика). Выигрывает тот, кто сможет выбросить "пару" -- одинаковое
количество очков на обоих кубиках. Если оба игрока выбрасывают "пару" или у обоих нет "пары", то побеждает игрок,
выбросивший большее количество очков в сумме, а при равенстве количества очков считается, что игра закончилась вничью.
Определите, кто выиграл в данной игре по количеству очков на каждом кубике.
Ввод содержит четыре целых числа `A_1`, `A_2`, `B_1`, `B_2` (`1 <= A_1, A_2, B_1, B_2 <= 6`),
по одному числу в строке. Первые два числа `A_1`, `A_2` -- количество очков на кубиках, выброшенных Алисой,
следующие два числа `B_1`, `B_2` -- количество очков на кубиках, выброшенных Бобом.
Вывести ``Alice``, если победила Алиса, вывести ``Bob``, если победил Боб, а в случае ничьей вывести ``Tie``.
```sample Пример ввода 1
2
2
4
5
```
```sample Пример вывода 1
Alice
```
```sample Пример ввода 2
2
3
4
1
```
```sample Пример вывода 2
Tie
```
*Система оценки и описание подзадач*
||.u|Подзадача 1 (30 баллов)||
`A_1 != A_2`, `B_1 != B_2` (у обоих игроков нет "пары")
В этой подзадаче 3 теста, каждый тест оценивается в 10 баллов.
Баллы за каждый тест начисляются независимо.
||.u|Подзадача 2 (30 баллов)||
`A_1 = A_2`, `B_1 = B_2` (у обоих игроков выпала "пара")
В этой подзадаче 3 теста, каждый тест оценивается в 10 баллов. Баллы за каждый тест начисляются независимо.
||.u|Подзадача 3 (40 баллов)||
`1 <= A_1, A_2, B_1, B_2 <= 6` (только у одного из игроков выпала "пара")
Необходимые подзадачи: 1, 2.
В этой подзадаче 8 тестов, каждый тест оценивается в 5 баллов. Баллы за каждый тест начисляются независимо
По запросу сообщается результат окончательной проверки на каждом тесте.
Хотя пример ввода 1 не соответствует ограничениям подзадач 1 и 2, ваше решение должно давать правильный ответ
и на этом примере для выполнения дальнейшего тестирования.
2. Ёлочка (7-8 классы)
Ограничения: время – 200ms/500ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Напишите в Blockly программу для робота-чертежника, который может перемещаться только между точками с целыми координатами
и поворачивать на углы, кратные 45 градусам. При движении робот проводит линию.
После выполнения программы робот должен вернуться в начальную точку в центре ствола, нарисовав ёлочку
высотой `n` веток. Длина нижней ветки ёлки (расстояние от ствола) должна быть равна `n`, длина остальных веток ёлки должна
уменьшаться на 1 от нижней к верхней. На рисунке показаны ёлочки высотой 2 и 4 ветки.
 
Для написания программы управления роботом вы можете использовать следующие блоки, заданные в категории "Робот":

Первый блок позволяет получить количество веток `n` (вы можете задавать это значение в соответствующем поле).
Второй блок указывает роботу двигаться вперед в текущем направлении.
При этом робот перемещается в соседнюю точку с целыми координатами, как показано на рисунке.

Третий блок указывает роботу изменить направление на указанный угол по часовой стрелке (для положительных значений) или против часовой стрелки (для отрицательных значений).
Первоначально робот направлен направо:

Например, чтобы нарисовать треугольник, нужно выполнить следующие команды:

Следующие пять блоков позволяют выполнять арифметические вычисления, проверять четность и сравнивать значения между собой.
Девятый блок дает возможность повторить выполнение некоторой группы блоков. Например, для рисования восьмиугольника можно выполнить программу:

Последние два блока позволяют выбрать выполняемую группу блоков в зависимости от условия. В настройках блока (символ шестеренки) можно
добавить или убрать дополнительные ветки выбора. После завершения настройки нужно повторно нажать на символ шестерёнки.
Для создания переменной в категории "Переменные" нужно щелкнуть по кнопке "Создать переменную" и ввести её название.
После этого в категории "Переменные" появятся блоки для получения и изменения значения переменной.
Для запуска программы используйте кнопки:

Первая кнопка позволяет отправить ваше решение для проверки в проверяющую систему соревнований, вторая кнопка выполняет запуск программу локально, третья –
пошаговое выполнение или временная остановка программы, четвертая -- завершение выполнения программы, после которой программа будет выполняться сначала.
Две кнопки над полем для рисования позволяют менять масштаб изображения как во время выполнения программы, так и после.
*Система оценки и описание подзадач*
В этой задаче 10 тестов для `n` от 1 до 10, каждый тест оценивается в 10 баллов. Баллы за каждый тест начисляются независимо.
По запросу сообщается результат окончательной проверки на каждом тесте.
---
Для написания программы для робота используется [специальная версия среды Blockly](blockly/2785.html).
Вы можете использовать полную среду Blockly при решении других задач этого соревнования, выбрав пункт Blockly
в информационном меню задачи.
3. Алгоритм (7-8 класс)
Ограничения: время – 200ms/500ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Реализуйте на одном из языков программирования алгоритм, представленный на схеме.

Первая строка ввода содержит одно целое число `N` (`1 <= N <= 1000000000`).
Вывести последовательность символов 0 и 1 на одной строке.
```sample Пример ввода 1
21
```
```sample Пример вывода 1
1000000
```
```sample Пример ввода 2
123
```
```sample Пример вывода 2
1010000000
```
*Система оценки*
В этой задаче 5 тестов, каждый тест оценивается в 20 баллов. Баллы за каждый тест начисляются независимо.
По запросу сообщается результат окончательной проверки на каждом тесте.
3. Колобок (9-11 класс)
Ограничения: время – 200ms/1000ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
 Компания проводит испытания робота-доставщика "Колобок". Роботу задается программа,
состоящая из последовательности трёх команд: "``F``" -- двигаться вперёд на 1 метр, "``+``" -- повернуть на 90 градусов по
часовой стрелке, "``-``" -- повернуть на 90 градусов против часовой стрелки. Первоначальная позиция
робота находится в начале координат (0,0), а испытатель должен поставить робота в направлении оси X.
На очередном тесте робот потерялся, то ли потому, что испытатель поставил робота в направлении оси Y или
против оси X, то ли потому, что при загрузке программе было сделано несколько ошибок. Ошибкой считается замена команды "``F``", "``+``" или "``-``" на любую не совпадающую команду "``F``", "``+``" или "``-``"
Определите по заданной программе и количеству возможных ошибок, насколько далеко робот мог оказаться от
начала координат после выполнения программы. Расстояние будем вычислять как `|x|+|y|`, где `x`,`y` -- координаты точки, в которой
робот мог оказаться после выполнения программы.
Первая строка ввода содержит последовательность из символов "``F``", "``+``" или "``-``", длиной от 2 до 2000.
Вторая строка содержит одно целое число `K` от 0 до 2 -- количество ошибок, сделанных при загрузке программы в память робота.
Вывести одно целое число -- максимальное значение для суммы модулей координат точки, в которой может оказаться робот
после выполнения программы.
```sample Пример ввода 1
FF+F
0
```
```sample Пример вывода 1
3
```
```sample Пример ввода 2
FF+F
1
```
```sample Пример вывода 2
4
```
```sample Пример ввода 3
FF
2
```
```sample Пример вывода 3
0
```
*Пояснение к примерам*
В примере 1 в программе нет ошибок. В зависимости от начального направления робот может оказаться
в точках (2, -1), (1, 2) или (-2, 1). Во всех случаях сумма модулей координат равна 3.

В примере 2 в программе ровно 1 ошибка. Если одна из "``F``" была заменена на "``+``" или "``-``",
то робот уедет не более чем на 2 метра от начала координат. Если при загрузке команда "``+``" была заменена на "F",
то робот окажется в точке (4,0), (0,4) или (-4,0) -- на расстоянии 4 от начала координат. Таким образом максимум равен 4.
В примере 3 в программе ровно 2 ошибки. Обе команды "``F``" были заменены на "``+``" или "``-``". После выполнения любой из
программ "``+-``", "``-+``", "``++``", "``--``" робот остановится в точке (0,0) и максимум будет равен 0.
*Система оценки и описание подзадач*
||.u|Подзадача 1 (10 баллов)||
`K=0`, длина строки до 50 символов
В этой подзадаче 2 теста, каждый тест оценивается в 5 баллов.
||.u|Подзадача 2 (10 баллов)||
`K=0`, длина строки до 2000 символов
Необходимые подзадачи: 1.
В этой подзадаче 2 теста, каждый тест оценивается в 5 баллов.
||.u|Подзадача 3 (20 баллов)||
`K=1`, длина строки до 200 символов
Необходимые подзадачи: 1, 2.
В этой подзадаче 4 теста, каждый тест оценивается в 5 баллов.
||.u|Подзадача 4 (20 баллов)||
`K=1`, длина строки до 2000 символов
Необходимые подзадачи: 1, 2, 3.
В этой подзадаче 4 теста, каждый тест оценивается в 5 баллов.
||.u|Подзадача 5 (20 баллов)||
`K=2`, длина строки до 200 символов
Необходимые подзадачи: 1, 2, 3, 4.
В этой подзадаче 4 теста, каждый тест оценивается в 5 баллов.
||.u|Подзадача 6 (20 баллов)||
`K=2`, длина строки до 2000 символов
Необходимые подзадачи: 1, 2, 3, 4, 5.
В этой подзадаче 4 теста, каждый тест оценивается в 5 баллов.
Во всех подзадачах баллы за каждый тест начисляются независимо. По запросу сообщается результат окончательной проверки на каждом тесте.
Хотя примеры ввода 2 и 3 не соответствует ограничениям подзадач 1 и 2, ваше решение должно давать правильный ответ
и на этих примерах для выполнения дальнейшего тестирования.
4 или 2. Сумма цифр (все классы)
Ограничения: время – 200ms/500ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Вычислите сумму цифр в числах от `A` до `B` включительно. Например, сумма цифр в
числах от 1 до 14 равна 1+2+3+4+5+6+7+8+9+(1+0)+(1+1)+(1+2)+(1+3)+(1+4)=60.
Ввод содержит два целых числа `A` и `B` (`1 <= A <= B <= 10^9`), по одному числу в строке.
Вывод должен содержать одно целое число -- сумму цифр в числах от `A` до `B` включительно.
```sample Пример ввода
1
14
```
```sample Пример вывода
60
```
*Система оценки и описание подзадач*
||.u|Подзадача 1 (20 баллов)||
`A=1`, `1<= B <= 1000`
В этой подзадаче 4 теста, каждый тест оценивается в 5 баллов. Баллы за каждый тест начисляются независимо.
||.u|Подзадача 2 (40 баллов)||
`1 <= A <= B <= 10^9`, `B-A <= 100000`
Необходимые подзадачи: 1.
В этой подзадаче 8 тестов, каждый тест оценивается в 5 баллов. Баллы за подзадачу начисляются только в случае,
если все тесты для этой подзадачи успешно пройдены.
||.u|Подзадача 3 (40 баллов)||
`1 <= A <= B <= 10^9`
Необходимые подзадачи: 1,2.
В этой подзадаче 8 тестов, каждый тест оценивается в 5 баллов. Баллы за подзадачу начисляются только в случае,
если все тесты для этой подзадачи успешно пройдены.
По запросу сообщается результат окончательной проверки на каждом тесте в подзадачах 1, и о первой ошибке в в подзадачах 2 и 3.
4. Сопротивление материалов (9-11 класс)
Ограничения: время – 200ms/10s, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Инженер исследует прочность здания на опорах, стоящих в один ряд. После строительства на `i`-ю опору будет приходиться вес `W_i`.
Далее в здании нужно будет разместить оборудование, которое тоже имеет вес. `i`-я опора разрушается, если на неё приходится
вес больше или равный `M_i` (`M_i > W_i`).
После разрушения опор вес, не удерживаемый опорами, поровну распределяется на соседние целые опоры от разрушенных опор.
Если разрушенные опоры были крайними слева или справа, то не удерживаемый этими опорами вес добавится на следующую целую опору.
Для каждой опоры нужно определить минимальный вес, размещение которого дополнительно над этой опорой приведет к разрушению всех опор здания.
Первая строка ввода содержит одно целое число `N` (`1 <= N <= 1000`). Вторая строка ввода содержит `N` целых чисел `W_i`,
разделенных пробелами -- начальная нагрузка на опоры. Третья строка ввода содержит `N` целых чисел `M_i`, разделенных пробелами -- максимальная
нагрузка на опоры (`1 <= W_i < M_i <= 10^6`).
Вывести `N` целых чисел, разделенных пробелами -- минимальный дополнительный вес для каждой опоры, который приведет к разрушению всех опор здания.
```sample Пример ввода 1
3
1 1 1
5 5 5
```
```sample Пример вывода 1
4 7 4
```
```sample Пример ввода 2
2
2 10
5 20
```
```sample Пример вывода 2
8 10
```
*Пояснение к примерам*
В примере 1 при размещении веса 4 над опорой 1 разрушит её, и на опору 2 добавится вес 4+1=5, что приведёт к
её разрушению, на опору 3 добавится вес 4+1+1=6, что разрушит опору 3. Для опоры 2 критическим будет
вес 7, вес 7+1=8 после разрушения опоры 2 будет распределен поровну между опорами 1 и 2, и каждой
добавится вес 8/2=4, что приведет к их разрушению.
При меньшем весе, например, 6, опорам 1 и 2 добавится по (6+1)/2=3.5 и общий вес 3.5+1=4.5 не
превысит ограничения 5.
В примере 2 на опоре 1 нужно разместить вес 8, чтобы это привело к разрушению и опоры 2.
*Система оценки и описание подзадач*
||.u|Подзадача 1 (60 баллов)||
`1 <= N <= 50`
В этой подзадаче 6 тестов, каждый тест оценивается в 10 баллов.
||.u|Подзадача 2 (40 баллов)||
`50 < N <= 1000`
Необходимые подзадачи: 1.
В этой подзадаче 4 теста, каждый тест оценивается в 10 баллов.
Во всех подзадачах баллы за каждый тест начисляются независимо. По запросу сообщается результат окончательной проверки на каждом тесте.
5. Пирамидки (7-8 класс)
Ограничения: время – 200ms/500ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Напишите в Blockly программу для робота, который перемещает разноцветные диски трех различных размеров между тремя колышками.
Первый колышек красного цвета, второй -- жёлтого, третий -- зелёного. Первоначально все девять дисков находятся на первом колышке.

После выполнения программы диски на колышках должны быть распределены по цвету (во всех подзадачах) -- на каждом
колышке только диски, совпадающие по цвету с цветом колышка -- и упорядочены по размеру (только в подзадачах 2 и 4) -- на каждом колышке
размеры дисков возрастают сверху вниз.
Для управления роботом вы можете использовать следующие блоки из категории "Робот".

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

Следующие блоки находятся в категории "Управление".

Первые два блока позволяют выбрать выполняемую группу
блоков в зависимости от условия. В настройках блока (символ шестеренки) можно добавить или убрать дополнительные ветки выбора.
После завершения настройки нужно повторно нажать на символ шестерёнки.
Третий блок позволяет задать число как аргумент для какого-либо блока.
Четвертый блок позволяет сравнить два значения.
Пятый и шестой блоки позволяют задавать сложные условия, используя логические операции И, ИЛИ, НЕ.

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

В этой программе две похожих группы блоков, за исключением двух констант.
Упростить программу поможет блок из категории "Функции".

После вставки блока и изменения имени
нужно щелкнуть символ шестеренки и добавить параметры n и k.

После завершения настройки нужно повторно нажать на символ шестерёнки.
Добавленные параметры появятся в категории "Переменные" и их можно будет использовать в блоках вместо констант:

Созданная функция появляется в категории "Функция" и её можно добавить в программу, указав значения для
параметров с помощью блока-числа из категории "Управление":

Для запуска программы используйте кнопки:

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

В поле "Начальное состояние" можно задать начальный порядок дисков. При нажатии
левой кнопкой мыши на диск, этот диск переставляется на вершину первого колышка.
*Система оценки и описание подзадач*
||.u|Подзадача 1 (10 баллов)||
В этой подзадаче 1 тест, с начальным расположением дисков, показанным на рисунке.

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

Необходимо разложить диски по цветам и размерам так, чтобы конечное состояние совпало с расположением на рисунке:

||.u|Подзадача 3 (50 баллов)||
Необходимые подзадачи: 1.
Девять дисков расположены на первом колышке. Необходимо разложить диски по цветам -- на колышке 1 должны быть диски только
цвета 1 (красного), на колышке 2 -- только цвета 2 (жёлтого), на колышке 3 -- только цвета 3 (зелёного).
В каком порядке расположены диски по размерам, не имеет значения.
В этой подзадаче 5 тестов, каждый тест оценивается в 10 баллов. Баллы за каждый тест начисляются независимо.
||.u|Подзадача 4 (30 баллов)||
Необходимые подзадачи: 1,2,3.
Девять дисков расположены на первом колышке. Необходимо разложить диски по цветам и размерам (см. рисунок выше).
В этой подзадаче 6 тестов, каждый тест оценивается в 5 баллов. Баллы за каждый тест начисляются независимо.
По запросу сообщается результат окончательной проверки на каждом тесте.
---
Для написания программы для робота используется [специальная версия среды Blockly](blockly/2788.html).
Вы можете использовать полную среду Blockly при решении других задач этого соревнования, выбрав пункт Blockly
в информационном меню задачи.
5. Эпоха империй (9-11 класс)
Ограничения: время – 200ms/1000ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
В пошаговой стратегической игре "Age of Empires" (Эпоха империй) игрок управляет растущей Римской империей. Игрок должен
поддерживать стабильность империи, которая должна находиться в диапазоне от 1 до 100. Если стабильность падает
до 0 или ниже -- игрок проигрывает. В начале игры стабильность равна 100. Каждый год игроку предлагается для присоединения одна
из соседних территорий, и игрок должен выбрать: присоединять или не присоединять эту территорию. При присоединении стабильность
снижается на некоторую величину `F_i` в зависимости текущей ситуации на этой территории, а размер империи увеличивается на размер территории `T_i`.
В начале игры размер империи равен 0. Если игрок выбирает не присоединять территорию, то стабильность империи возрастает на `P` единиц, но при
этом стабильность не может превысить 100 (если сумма становится больше 100, она уменьшается до 100).
Определите, какой максимальный размер империи может быть у игрока к концу партии, без крушения его империи.
В первой строке ввода содержатся два целых числа: продолжительность партии в годах `N` (`1 <= N <= 10000`) и скорость стабилизации
в годы без присоединений `P` (`0 <= P <= 99`). Далее следует `N` строк, каждая из которых содержит
два целых числа: `i`-я строка описывает территорию, возможную для присоединения в `i`-й год: величину уменьшения стабильности
при присоединении `F_i` (`1 <= F_i <= 99`) и размер территории `T_i` (`1 <= T_i <= 100000`).
Выведите одно целое число -- максимальный размер империи через `N` лет.
```sample Пример ввода
3 15
60 1800
90 5000
50 3300
```
```sample Пример вывода
5100
```
Пояснение к примеру: можно присоединить первую и третью территории.
В первый год стабильность после присоединения снизится до 40, во второй год возрастет до 55, в третий
снова снизится до 5.
*Система оценки и описание подзадач*
||.u|Подзадача 1 (20 баллов)||
`P = 0`, `F_i = 99`, остальные ограничения из условий задачи
||.u|Подзадача 2 (20 баллов)||
`P = 99`, `F_i = 99`, остальные ограничения из условий задачи
||.u|Подзадача 3 (30 баллов)||
`P = 0`, остальные ограничения из условий задачи
Необходимые подзадачи: 1, 2.
||.u|Подзадача 4 (30 баллов)||
Ограничения из условий задачи.
Необходимые подзадачи: 1, 2, 3.
Баллы за каждую из подзадач начисляются только в случае,
если все тесты для этой подзадачи успешно пройдены.
По запросу сообщается результат о первой ошибке.
Хотя пример ввода не соответствует ограничениям подзадач 1, 2 и 3, ваше решение должно давать правильный ответ и на этом
примере для выполнения дальнейшего тестирования.