Научная статья на тему 'Задачи первой Всероссийской командной олимпиады школьников по информатике'

Задачи первой Всероссийской командной олимпиады школьников по информатике Текст научной статьи по специальности «Математика»

CC BY
1943
145
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по математике, автор научной работы — Станкевич Андрей Сергеевич

Автор статьи, председатель жюри олимпиады, знакомит читателей с условиями и решениями задач.

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

Текст научной работы на тему «Задачи первой Всероссийской командной олимпиады школьников по информатике»

Станкевич Андрей Сергеевич

ЗАДАЧИ ПЕРВОЙ ВСЕРОССИЙСКОЙ КОМАНДНОЙ ОЛИМПИАДЫ ШКОЛЬНИКОВ ПО ИНФОРМАТИКЕ

Задача А РЕДАКТОР

Компания МаетоНатй выпустила новую версию своего редактора ИоМооЬаё, который понимает некоторые голосовые команды. К сожалению, этих команд всего две - «повторить последнее слово» и «стереть последний символ». Причем, при исполнении команды «повторить последнее слово» редактор автоматически вставляет пробел, который разделяет слова.

во зафиксировано, а остальные могут быть набраны в произвольном порядке. То есть, если надо набрать слова «apple», «plum» и «apricote», то первым надо набрать «apple», а слова «plum» и «apricote» можно поменять местами.

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

Однако компания утверждает, что с помощью этого редактора можно набирать текст, нажимая клавиши на клавиатуре гораздо реже. Например, чтобы набрать фразу «this thin thing», достаточно нажать на клавиши на клавиатуре всего 6 раз (см. таблицу 1).

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

Решение

Решение этой задачи напоминает известный алгоритм цифровой сортировки.

Заметим, что если некоторый набор слов начинается с одной и той же буквы, то их всегда выгодно набирать подряд. Действительно: предположим, что мы нашли оптимальное решение, в котором данное условие не выполняется. Предположим, к примеру, что слова, начинающиеся с буквы «а» набирались не подряд. Тог-

Действие Нажатий Содержимое документа

Набрать «this» 4 this

Сказать «повторить последнее слово» 0 this this

Сказать «стереть последний символ» 0 this thi

Набрать «n» 1 this thin

Сказать «повторить последнее слово» 0 this thin thin

Набрать «g» 1 this thin thing

Таблица 1

Блок Описание Кол-во

нажатий

1 Различные слова XI

2 Слова, начинающиеся с буквы «а» Х2

3 Различные слова,

не начинающиеся с буквы «а» Х3

4 Слова, начинающиеся с буквы «а» Х4

5 Различные слова Х5

Таблица 2

Таблица 3

да порядок набора выглядит так, как в таблице 2. Переставим блоки, как в таблице 3.

Тем самым суммарное количество нажатий уменьшилось, по крайней мере, на 1. А это противоречит утверждению о том, что выбранный порядок нажатий был оптимальным.

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

Заметим теперь, что порядок набора слов в каждой группе не влияет на количество нажатий, требуемое для набора остальных групп, поскольку при смене первой буквы слова для набора следующего в любом случае придется стереть все буквы предыдущего голосовыми командами (а всегда выгодно сказать «повторить последнее слово», поскольку в этом случае не приходится набирать пробел). Значит, порядок набора слов в каждой группе можно определять независимо.

Рассмотрим набор слов, начинающихся с одной буквы. Отбросив первую букву, получим задачу, эквивалентную ис-

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

Осталось найти порядок слов, при котором слова, имеющие совпадающими первые г букв, не будут разделены словом, у которого одна из первых г букв отличается от букв данных слов. Ясно, что таким является, например, лексикографический (алфавитный) порядок. Единственная проблема в том, что слово, заданное во входном файле первым, необходимо оставить первым. Можно предложить, например, такое ее решение: разделим слова на две группы -те, которые начинаются с той же буквы, что и первое слово, и все остальные. Как было показано выше, слова в этих группах можно упорядочивать независимо. Упорядочим слова во второй группе лексикографически, а в первой группе виртуально удалим у всех слов первую букву и повторим операцию для них. Зная порядок, в котором следует набирать слова, нетрудно подсчитать количество нажатий, которое для этого потребуется.

Задача В

МАРСИАНСКИЕ ФАКТОРИАЛЫ

В 3141 году очередная экспедиция на Марс обнаружила в одной из пещер таинственные знаки. Они однозначно доказывали существование на Марсе разумных существ. Однако смысл этих таинственных знаков долгое время оставался неизвестным. Недавно один из ученых, профессор Очень-Умный, заметил один интересный факт: всего в надписях, составленных из этих знаков, встречается ровно К

Блок Описание Кол-во

нажатий

1 Различные слова Х1

2 Слова, начинающиеся с буквы «а» Х2

4 Слова, начинающиеся с буквы «а» Не более Х4-1

3 Различные слова,

не начинающиеся с буквы «а» Х3

5 Различные слова Не более Х5

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

Вывод, который сделал из своих наблюдений профессор, потряс всех ученых Земли. Он предположил, что эти надписи являются записями факториалов различных натуральных чисел в системе счисления с основанием К. А символы в конце - это, конечно же, нули - ведь, как известно, факториалы больших чисел заканчиваются большим количеством нулей. Например, в нашей десятичной системе счисления факториалы заканчиваются на нули, начиная с 5! = 1- 2 • 3 • 4 • 5 = 120 . А у числа 100! в конце следует 24 нуля в десятичной системе счисления и 48 нулей в системе счисления с основанием 6 - так что у предположения профессора есть разумные основания!

Теперь ученым срочно нужна программа, которая по заданным числам N и К найдет количество нулей в конце записи в системе счисления с основанием К числа N! = 1 • 2 • 3 •... • (N -1) • N , чтобы они могли проверить свою гипотезу. Вам придется написать им такую программу!

Значит,

Решение

Для решения этой задачи достаточно заметить, что для того, чтобы число А заканчивалось на X нулей в системе счисления с основанием К, необходимо и достаточно, чтобы оно делилось без остатка на Кх. Действительно:

А = АрКр + АР-1 Кр-1 +... + А0К0 . Если оно заканчивается на X нулей, то А, = 0 для г = 0, 1,..., Х-1.

А = АРКР + АР-1 Кр-1 +... + АХКХ =

X

(АРКР-Х + Аг

Кр-Х-1 +... + АХК 0 )к

Р -т-л-р-11

делится на Кх. Обратно, если А = В • Кх, то представляя

В = ВдКв + Вд_1 Кв-1 +... + В0К0 , получаем, что в разложении А младшие X цифр будут нулями.

Значит, задача свелась к тому, чтобы определить, на какую максимальную степень К делится число N7. Поскольку N7 может быть очень велико, непосредственное его вычисление с целью такой проверки невозможно. Разложим число К на простые множители. Пусть К = РР2"2 •••Р3а , тогда, если N7 делится на соответственно РЬ , то N7 делится на К2, где

и

} (см. примечание х).

2 = шт{

, =1..£

Единственная оставшаяся проблема - как для простого числа Р найти максимальную его степень, на которую делится N7.

Для этого применим следующие соображения: количество чисел, кратных Р

N

и не превышающих N равно — . Каждое из этих чисел даст по одному простому множетелю Р в N7. Но, кроме того,

чисел дадут еще по одному Р, N

рЗ

и =

еще по одному и т. д. Значит,

+...

N N N

+ 1Р,2 1 + 1Р,3 1

_ Р, _

Заметим, что суммирование можно остановить, когда очередное слагаемое равно 0.

Задача С

ФОНТАН

Администрация одного института решила построить в холле фонтан. По плану администрации, фонтан должен иметь форму круга с максимально возмож-

ным радиусом. Дизайнеру сообщили, что холл института имеет вид прямоугольника размером X х У метров. Однако, когда дизайнер стал выбирать место для фонтана, он столкнулся с серьезной проблемой: в холле института обнаружилось N круглых колонн, снести которые не представляется возможным.

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

Решение

Это самая сложная задача из предлагавшихся на олимпиаде. Идея ее решения следующая: предположим, мы хотим построить фонтан радиуса Я. Тогда, чтобы проверить, что мы можем это сделать, увеличим радиус всех колонн на Я, а каждую сторону холла уменьшим на 2Я (так, чтобы его центр оставался на том же месте). Тогда, чтобы проверить, можем ли мы построить такой фонтан, достаточно выяснить, покроют ли после этой операции круги колонн прямоугольник холла полностью. Если это так, то построить фонтан данного радиуса, очевидно, не удастся.

Чтобы проверить, что множество кругов покрывает заданный прмоугольник, можно использовать следующий алгоритм: достаточно проверить, что точки пересечения любых двух окружностей, лежащие внутри прямоугольника, точки пересече-

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

Для нахождения точек пересечения двух окружностей необходимо решить следующую систему уравнений относительно х и у:

(х - Хг)2 + (у - У1)2 = Г!2 (х - Х2)2 + (у - У2)2 = Г22

После замены х - х1 = Х , у - у1 = у и обозначения х1 - х2 = Ах , у1 - у 2 = Ду, система принимает вид:

2 2 2 х + у = Г1

х 2 + 2хДх+Дх2 + у 2 + 2 уДу+Ду 2 = г22

После вычитания первого уравнения из второго, получаем линейную зависимость между х и у :

х 2 + у 2 = Г12

2 хДх + Дх 2 + 2 уДу + Ду 2

Г -Г

Отсюда несложно получить квадратное уравнение для х или у .

Пересечение прямой с окружностью выполняется аналогично - там линейная зависимость сразу задается принадлежностью к прямой.

Затем для проверки того, что точка лежит внутри круга, достаточно проверить, что расстояние от точки до центра круга меньше его радиуса.

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

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

2

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

Задача Б

ДЕТСКИЙ ПРАЗДНИК

Организаторы детского праздника планируют надуть для него И воздушных шариков. С этой целью они пригласили N добровольных помощников, I -й среди которых надувает шарик за Т минут, однако каждый раз после надувания ^ шариков устает и отдыхает У1 минут. Теперь организаторы праздника хотят узнать, через какое время будут надуты все шарики при наиболее оптимальной работе помощников и сколько шариков надует каждый из них. (Если помощник надул шарик и должен отдохнуть, но больше шариков ему надувать не придется, то считается, что он закончил работу сразу после окончания надувания последнего шарика, а не после отдыха).

Решение

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

Задача Е

СИМПАТИЧНЫЕ УЗОРЫ

Компания БтокепТИез планирует заняться выкладыванием во дворах у состоятельных клиентов узор из черных и белых плиток, каждая из которых имеет размер 1 х 1 метр. Известно, что дворы всех состоятельных людей имеют наиболее модную на сегодня форму прямоугольника М X N метров.

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

Как показало исследование, узор является симпатичным, если в нем нигде не встречается квадрата 2 х 2 метра, полностью покрытого плитками одного цвета. На рисунке 1а показаны примеры различных симпатичных узоров, а на рисунке 1б -несимпатичных.

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

Решение

Для решения этой задачи применим динамическое программирование. Сна-

чала заметим, что общее количество узоров не превышает 2M'N < 230 , что означает, что ответ на задачу поместится в типы данных longint в Паскале и long в Си. Будем также, не ограничивая общности, считать, что M < N , а значит, M < 5 .

Рассмотрим узор размера M x K, где K может меняться в пределах от 1 до N, а M зафиксировано. Назовем профилем узора двоичное число, кодирующее его самый правый столбец, где черному квадратику отвечает 1, а белому - 0.

На рисунке 2 приведен пример узора 3х 3 с профилем 001. Заметим, что количество различных профилей не зависит от K и равно 2M. Значит, поскольку M < 5 , количество различных профилей не превышает 32.

н

0

0 * 001

1

Рисунок 2

Теперь для каждого К и каждого профиля 2 посчитаем количество А [К] [2] симпатичных узоров размера М х К, имеющих профиль 2. Поскольку в узоре М х 1 одноцветных квадратов 2 х 2 встретиться не может, для всех профилей А[1][2]=1. Далее, при переходе от К к К+1 следует для данного профиля 2 сложить те значения А[К][У], где в У хог 2 не встречается подряд двух нулей (это отвечает нарушению симпатичности).

Наконец, ответ на задачу получается при сложении по всем 2 значений А[Я][2].

Задача Е

КУБИКИ

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

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

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

О

т

к

л

Рисунок 3

Решение

Эта задача сводится к нахождению максимального паросочетания в двудольном графе.2 Рассмотрим кубики и буквы имени сестры как вершины графа и со-

единим кубик ребром с буквой, если эта буква написана на этом кубике (рисунок 3). Заметим, что граф действительно двудольный, а выбор кубиков для выкладывания имени эквивалентен построению паросочетания. Поскольку количество ребер в паросочетании не превышает количества вершин в меньшей доле, то искомое паросочетание действительно максимально.3

Задача О

ВОЛШЕБНАЯ

ПОСЛЕДОВАТЕЛЬНОСТЬ

Недавно Петя научился считать. Он тут же заметил, что число 2 обладает замечательным свойством - 2 + 2 = 2 X 2 . Его старший брат Ваня тут же объяснил ему, что дело не в двойке.

«Дело в том, что последовательность 2, 2 - волшебная, - сказал Пете Ваня. -Волшебная последовательность - это такая последовательность натуральных чисел, что сумма ее членов равна их произведению. Например, последовательность 1, 2, 3 - тоже волшебная.»

Петя тут же сложил 1, 2 и 3, потом перемножил их и обрадовался.

Теперь Петя хочет найти более длинные волшебные последовательности. Помогите ему!

Решение

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

n-2

задачи.

Задача Н

ПОХОЖИЕ МАТРИЦЫ

Рассмотрим таблицу, состоящую из N строк и И столбцов. Если в каждой ячейке такой таблицы стоит целое число, назовем такую таблицу целочисленной матрицей. Скажем, что эта матрица кратна числу р, если все числа в ее ячейках кратны р.

Рассмотрим теперь суммы элементов матрицы по строкам и столбцам, соответственно. Обозначим сумму чисел I -й строки через Н , а сумму чисел у -го столбца через Уу. Упорядоченный набор чисел

Н2,...НN,У1,У2,...Ум ) назовем пРофилем матрицы. Скажем, что матрица почти кратна р , если все числа, входящие в ее профиль, кратны р .

Почти кратная 5 матрица и ее профиль изображены на рисунке 4.

6 7 2 15

2 2 31 35

7 1 7 15

15 10 40

Рисунок 4

Если две матрицы А и Б имеют одинаковый размер, причем элемент, стоящий на пересечении I -й строки и у -го столбца в матрице А, отличается от соответствующего элемента матрицы Б не более чем на р , скажем, что А отличается от Б не более чем на р . Скажем, что матрица Б похожа на матрицу А относительно числа р , если

1. Б отличается от А не более чем на р.

2. Профили Б и А совпадают.

На рисунке 5 изображены две похожие относительно числа 5 матрицы, первая из них почти кратна 5, а вторая кратна 5. Третья матрица на рисунке 2 тоже кратна 5, но не похожа на первую (хотя похожа на вторую).

Дано число р и почти кратная р матрица А. Ваша задача - найти такую матрицу Б, чтобы она была кратна р и похожа на А относительно р .

а

6 7 2

2 2 31

7 1 7

5 5 5

0 5 30

10 0 5

5 5 5

0 0 35

10 5 0

почти кратна 5

кратна 5, похожа на А

Рисунок 5

кратна 5, но непохожа на А

Решение

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

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

6 7 2

2 2 31

7 1 7

5 8 2

2 2 31

7 1 7

Рисунок 6

на 1, а второе число увеличим на 1 (рисунок 6).

Сумма чисел в строке не изменилась, правда, испортились суммы в столбцах ] и &. Рассмотрим столбец &. Поскольку в нем было число, не кратное р, а сумма чисел в нем кратна р, то в нем найдется еще одно число, не кратное р, скажем, в ячейке (1,к). Уменьшим его на единицу и повторим рассуждения для строки I. Рано или поздно мы снова попадем в столбец у, тогда увеличив соответствующее число на 1, мы получим, что профиль матрицы не изменится, первое не кратное р число уменьшится на 1, причем ни одно число не будет отличаться от своего исходного значения более чем на р, поскольку все изменения за один шаг делаются ровно на 1, значит, чтобы измениться более чем на р, числу попутно нужно принять значение, кратное р, а после этого оно уже не будет меняться.

Осталось показать, что, если повторять эту операцию, рано или поздно мы получим матрицу, кратную р. Но, действительно, если первое не кратное р число в матрице имело остаток х от деления на р, то в течение х итераций оно будет оставаться первым не кратным р числом в матрице, после х итераций станет кратным р. Значит, не более, чем через т ■ п ■ р итераций матрица станет кратна р (рисунок 7).

6 7 2

2 2 31

7 1 7

*

5 8 2

2 2 31

7 1 7

*

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

5 8 2

2 1 31

7 1 7

*

5 8 2

2 1 32

7 1 7

*

5 8 2

2 1 32

7 1 6

*

5 8 2

2 1 32

8 1 6

Рисунок 7

Полные решения задач (программы) находятся на дискете к журналу.

1 \_а\ - ближайшее целое, не превышающее я.

2 Граф называется двудольным, если его вершины можно разбить на два множества (Л и П) так, что любое ребро графа соединяет вершину из «левого» множества Л с вершиной из «правого»

множества П. Паросочетанием называется любое подмножество попарно не смежных ребер двудольного графа.

3 Для нахождения максимального паросочетания разработаны стандартные алгоритмы. Наиболее популярный алгоритм, использующий удлиняющие чередующиеся цепи, описан, например, в книге А.В. Ахо, Дж.Э. Хопкрофта, Дж.Д. Ульмана «Структуры данных и алгоритмы», нахождение максимального паросочетания через поиск максимального потока в сети с помощью алгоритма Форда-Фалкерсона описано, например, в книге Т. Кормена, Ч. Лейзерстона, Р. Ривеста «Алгоритмы: построение и анализ», теоретическое исследование проблемы максимального паросочетания можно найти, например, в книге И.В. Романовского «Дискретный анализ».

4 Более формально: будем обозначать ячейку на пересечении г-й строки и]-го столбца (г, у) . Скажем, что ячейка (г, у) идет раньше (к, I) в матрице, если г < к или г = к, у < I (лексикографический порядок). Скажем, что ячейка (г, у) , удовлетворяющая некоторому свойству, - первая, удовлетворяющая этому свойству, если для всех остальных ячеек (к, I) , удовлетворяющих этому свойству, (г, у) идет раньше (к, I) в матрице. Несложно показать, что наше определение корректно, то есть, если некоторому свойству удовлетворяет хотя бы одна ячейка, то найдется первая ячейка в матрице, удовлетворяющая этому свойству.

Парфенов Владимир Глебович, профессор кафедры компьютерных технологий СПбГИТМО (ТУ), руководитель отделения прикладной математики, физики и компьютерных технологий.

Станкевич Андрей Сергеевич, студент СПбГИТМО (ТУ), председатель жюри первой Всероссийской командной олимпиады школьников по информатике.

НАШИ АВТОРЫ

i Надоели баннеры? Вы всегда можете отключить рекламу.