Муниципальный этап, 9–11 классы всероссийской олимпиады по информатике: 5 задач с официальным разбором, к каждой наше решение на C++.

К задаче 1

Муниципальный этап ВсОШ по информатике 2023/24, 9–11 классы.

Задачи тура

Отмечайте решённые: 0 из 5

1. Ферзь

0.5 секунд, математика, разбор случаев

Пётр любит шахматы и математику. Он знает, что самая мощная фигура в шахматах — это ферзь, потому что он ходит и как ладья, на все клетки на одной с ним вертикали или горизонтали, и как слон, на все клетки по диагоналям. Ферзя можно поставить на доску так, чтобы он контролировал (то есть мог переместиться в эти клетки за один ход) целых 27 клеток доски!

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

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

Первая строка входных данных содержит целое число () — размер доски по вертикали.

Вторая строка входных данных содержит целое число () — размер доски по горизонтали.

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

Программа должна вывести одно целое число — максимальное количество клеток, которое может контролировать ферзь на доске .

Обратите внимание на то, что ответ в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип long long в языке C++, тип int64 в Pascal, тип long в Java и C#).

Система оценки

Решения, правильно работающие, когда и не превоcходят , будут оцениваться в 40 баллов.

Решения, правильно работающие, когда и не превоcходят , будут оцениваться в 80 баллов.

Замечание

Второй пример из условия приведён на рисунке. Крестиками обозначены клетки, которые контролирует ферзь.

Доска 3×4 с ферзём и клетками под боем
Доска 3×4 с ферзём и клетками под боем
стандартный вводстандартный вывод
8
8
27
стандартный вводстандартный вывод
3
4
9
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

2. Рамка для рисунка

1 секунда, математика, жадный алгоритм, разбор случаев

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

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

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

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

Первая строка входных данных содержит целое число — количество палочек длины 1, .

Вторая строка входных данных содержит целое число — количество палочек длины 2, .

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

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

Обратите внимание на то, что ответ в этой задаче может превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип long long в языке C++, тип int64 в Pascal, тип long в Java и C#).

Система оценки

Решения, правильно работающие, когда и не превосходят , будут оцениваться в 20 баллов.

Решения, правильно работающие, когда и не превосходят , будут оцениваться в 40 баллов.

Решения, правильно работающие, когда и не превосходят , будут оцениваться в 60 баллов.

Замечание

В первом примере есть 5 палочек длины 1. Из них можно сложить квадрат со стороной 1, его площадь равна 1, при этом одна палочка останется.

Во втором примере есть 4 палочки длины 1 и 3 палочки длины 2. Из них можно сложить прямоугольник размера .

В третьем примере есть 3 палочки длины 1, из них невозможно сложить прямоугольник.

стандартный вводстандартный вывод
5
0
1
стандартный вводстандартный вывод
4
3
6
стандартный вводстандартный вывод
3
0
0
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

3. Телефонный справочник

1 секунда, строки, жадный алгоритм

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

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

В единственной строке содержится одно слово, состоящее из строчных латинских букв (от a до z) длиной ().

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

Выведите одно слово — новое название компании. Если название не изменилось, выведите изначальное название.

Система оценки

Решения, верно работающие при , будут оцениваться в 20 баллов.

Решения, верно работающие при , будут оцениваться в 40 баллов.

Решения, верно работающие при , будут оцениваться в 60 баллов.

Решения, верно работающие при , будут оцениваться в 80 баллов.

стандартный вводстандартный вывод
aefbz
abfez
стандартный вводстандартный вывод
abc
abc
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

4. Задачи на печать!

1 секунда, жадный алгоритм, разбор случаев

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

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

Условия всех задач распечатываются на принтере в виде нескольких последовательных заданий. Для каждого задания необходимо задать диапазон печати: номера первой и последней страниц, которые будут напечатаны в этом задании (будут напечатаны все страницы в этом диапазоне), а также тип печати — односторонняя или двусторонняя.

Вам необходимо минимизировать количество заданий для печати условий.

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

Первая строка входных данных содержит целое число () — количество задач в олимпиаде.

Следующие строк содержат по одному целому числу () — количество страниц в -й задаче.

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

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

Система оценки

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

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

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

Решения, верно работающие, когда , будут оцениваться не менее чем в 50 баллов.

Решения, верно работающие, когда , будут оцениваться не менее чем в 80 баллов.

Замечание

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

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

стандартный вводстандартный вывод
4
1
3
2
1
2
стандартный вводстандартный вывод
2
3
3
2
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

5. Вечер кёрлинга

1 секунда, жадный алгоритм, два указателя, сортировка

Сегодня вечером по телевизору на разных каналах будут показывать матчей по кёрлингу, причём -й матч начинается в момент времени и заканчивается в момент времени .

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

Помогите Василисе составить набор, содержащий максимальное количество матчей, которые она сможет просмотреть полностью и при этом сделать перерыв продолжительностью не менее между какими-то матчами, или определите, что такого набора не существует.

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

Первая строка входных данных содержит число () — количество показываемых матчей.

Вторая строка входных данных содержит число () — минимальная длина перерыва, который должна сделать Василиса.

В следующих строках содержится по два числа и () — начало и конец -го матча.

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

Программа должна вывести число — максимально возможное количество матчей, которые просмотрит Василиса. Во второй строке выведите чисел через пробел — номера матчей, которые должна посмотреть Василиса, в порядке просмотра.

Если Василиса не может составить расписание хотя бы из двух матчей так, чтобы между какими-то двумя матчами был перерыв хотя бы , то выведите число .

Система оценки

Решения, верно работающие при , будут оцениваться в 20 баллов.

Решения, верно работающие при , будут оцениваться в 40 баллов.

Решения, верно работающие при , будут оцениваться в 30 баллов.

Замечание

В первом примере ответом будет последовательность матчей 6, 3, 5. Василиса сначала посмотрит матч 6, который заканчивается в момент времени 4, потом переключится на матч 3, который продолжается с 4 до 6. Затем она сделает перерыв с 6 по 10, после чего просмотрит матч номер 5 с 10 до 12. Получилось расписание из 3 матчей с перерывом, продолжительность которого равна 4. Заметим, что в данном примере правильным ответом также будет последовательность матчей 6, 4, 5, в этом случае продолжительность перерыва между матчами 4 и 5 будет равна 3.

Во втором примере всего два матча, первый заканчивается в 5, а второй начинается в 9, то есть составить расписание, в котором был бы перерыв продолжительностью не менее , нельзя.

стандартный вводстандартный вывод
6
3
8 13
1 5
4 6
4 7
10 12
2 4
3
6 3 5
стандартный вводстандартный вывод
2
5
1 5
9 13
-1
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

Сначала решите сами

Возьмите столько времени, сколько было на олимпиаде, и только потом открывайте разбор.

Готовиться самому

Платформа с задачами

1400+ задач с автопроверкой

или
Пробное занятие

Призёр ВсОШ, первое бесплатно