г. Хабаровск, 2001/2002 учебный год

advertisement
Статья по информатике из журнала МИФ-2 №2 за 2002 год
Богоутдинов Дмитрий Гилманович, Казинец Виктор Алексеевич
ОЛИМПИАДНЫЕ ЗАДАЧИ ПО ИНФОРМАТИКЕ (Г. ХАБАРОВСК, 2001/2002
УЧЕБНЫЙ ГОД)
За последние несколько лет сложились определенные традиции при проведении
городской олимпиады по информатике. То есть при всем содержательном многообразии
задач, предлагаемых на городских олимпиадах достаточно легко выделить следующие
типы задач:
задачи, связанные с теорией чисел;
задачи, связанные с различными сортировками;
задачи на поиск или перечисление путей в графах;
задачи на перечисление объектов;
простейшие задачи, связанные с сетевым планированием и составлением
расписаний.
Заметим, что задачи такой же тематики предлагаются на краевых и общероссийских
олимпиадах. По большому счету идеи всех задач и методы их решения следует искать в
книгах Кнута «Искусство программирования». Мы, исходя из опыта проведения
олимпиад, расскажем о типовых задачах и методах их решения, основываясь на задачах
городской олимпиады по информатике. Следует отметить, что существуют достаточно
много решений любой задачи по информатике. При оценке решения таких задач можно
акцентировать внимание на экономичность алгоритма, добавляя некоторое количество
баллов, а можно исходить только из того, решена задача или нет. В связи с тем, что
вопросы, связанные с оптимальностью алгоритма не рассматриваются в школьной
программе, да и в вузовской им уделяется мало внимания, мы учитываем оптимальность
алгоритма лишь при равенстве баллов при определении призеров олимпиады.
Олимпиада проходила в два тура. На первом (теоретическом) туре школьникам
предлагалось решить 5 задач (способ решения, описание решения ученик выбирает
самостоятельно). Второй (практический) тур предполагался для определения уровня
умений ученика решать поставленную задачу с использованием ЭВМ.
Здесь
предполагались две задачи.
Для учеников 10 класса в теоретическом туре предлагались следующие задачи:
Задача 1. Выберем любое целое число и прибавим к нему сумму его цифр. Например,
если мы выберем число 47, то сумма его цифр 4+7=11 и 47+11=58. Новое число
называется порожденным числом, а исходное число его генератором. Найти все числа
меньшие 1000, у которых нет генераторов.
(6 баллов)
Задача 2. Найти все шестизначные числа, при умножении которых на 3 или 7 в
произведении получается число, образованное перестановкой цифр данного числа.
(5 баллов)
Задача 3. Грани кубика помечены числами от 1 до 6. Если кубик лежит на плоскости, то
оставляет след в виде квадрата с цифрой равной цифре на основании кубика. Кубик
катится по столу, переворачиваясь через ребра. Возьмем некоторую последовательность,
состоящую из цифр от 1 до 6. Определить является ли данная последовательность следом
кубика.
(8 баллов)
Задача 4. Задан алфавит из трех букв a, b, c и следующие правила создания слов:
Любая буква из алфавита – это слово.
Если даны два слова А и В, то символ А|В является словом.
Хабаровская краевая заочная физико-математическая школа
Статья по информатике из журнала МИФ-2 №2 за 2002 год
Любая последовательность символов из алфавита, заключенная в «круглые» скобки,
является словом.
Задается некоторый набор символов. Определить является ли этот набор символов
словом.
(8 баллов)
Задача 5. Дан набор N различных блоков в виде прямоугольных параллелепипедов. Из
них строится пирамида по правилам:
Каждый слой пирамиды состоит из одного блока.
Последующий блок должен полностью лежать на предыдущем блоке.
 Размеры каждого блока заданы.
Какую самую высокую пирамиду можно построить из этих блоков?


(15 баллов)
Первая задача, как легко видеть, имеет несколько решений. Можно для каждого числа
определить есть ли у него генератор или нет. А затем, перебирая числа от 1 до 1000,
определить все числа без генератора. Или выписать все генераторы для числа от 1 до 1000
и сравнить полученный массив с числами от 1 до 1000, выбрав необходимые числа.
Вторая задача решается обычным перебором чисел от 100000 до 999999, умножением их
на число 3 и сравнения цифр первоначального числа и результата умножения. Аналогично
поступаем с цифрой 7. Понятно, что, используя тот факт, что при умножении на 1 или 7
мы должны получить шестизначное число, область перебора можно ограничить.
Третья задача предполагала, что расположение цифр от 1 до 6 по граням кубика задается
учеником, и самое главное необходимо было определить невозможность той или иной
цифры следовать друг за другом. Задача, на наш взгляд на аккуратность, внимание и
умение моделировать ситуации, возникающие при анализе задачи.
Четвертая задача связана с анализом текста. Такие задачи, конечно более сложные,
возникают при написании трансляторов для тех или иных языков программирования.
Решается она либо рекурсивно, либо с помощью анализа условий задачи и удобного
моделирования данных. Например, все символы алфавита можно заменить нулем, а
раздельную черту на единицу. И в соответствии с правилами просмотреть полученное
слово.
Пятая задача была наиболее трудной, обычно такие задачи и выявляют участников
занявших призовые места.
Есть очень громоздкий и долгий метод решения этой задачи. Он заключается в
следующем:
1. Выбираем из N блоков K блоков (К изменяется от 1 до N).
2. Рассматриваем все перестановки этих К блоков с учетом, что каждый блок имеет три
грани.
3. Для каждой перестановки определяем, является ли набор пирамидой и, если является,
находим высоту пирамиды.
4. Выбираем наибольшую высоту.
Понятно, что ни о какой оптимальности говорить не приходится. Но мы имеем решение
задачи. Следует помнить, что как только мы пожелаем оптимизировать алгоритм решения
задачи, нам придется доказывать, что оптимизированный алгоритм является решением
задачи. Так же заметим, что выбор языка программирования иногда существенно влияет
на решения таких задач (на Си задача решается проще, чем на Бейсике).
Хабаровская краевая заочная физико-математическая школа
Статья по информатике из журнала МИФ-2 №2 за 2002 год
Рассмотрим задачи, предлагаемые ученикам 9 класса.
Задача 1. Выберем любое целое число и прибавим к нему сумму его цифр. Например,
если мы выберем число 47, то сумма его цифр 4+7=11 и 47+11=58. Новое число
называется порожденным числом, а исходное число его генератором. Может ли
порожденное число иметь более одного генератора? Если да, то привести пример.
Решение. Данная задача решается использованием двух вложенных циклов. Во внешнем
цикле будем перебирать все числа до тех пор, пока не встретим число, которое можно
породить несколькими способами, а во втором – будем перебирать генераторы от 1 до
порожденного числа.
Задача 2. На листе бумаги разлинованной в клетку изображены контуры двух фигур,
линия контура лежит на границе клеток. Являются ли фигуры одинаковыми?
Решение. Две фигуры считаются одинаковыми, если они совпадают при наложении.
Следовательно, для того, чтобы проверить являются ли фигуры одинаковыми нам нужно
написать алгоритм совмещения двух фигур. Один из способов решения данной задачи
состоит в следующем:
1. Будем обходить фигуры так, чтобы они всегда находились слева (т.е. против часовой
стрелки).
2. Обозначим через 1 – движение вниз; 2 – движение вправо; 3 – движение вверх; 4 –
движение влево.
3. Каждую из данных фигур закодируем при помощи введенных обозначений.
4. Если последовательность для первой фигуры можно получить какой-либо
циклической перестановкой из последовательности для второй фигуры.
5. Если в шаге 4 фигуры не равны, то нужно проверить можно ли первую фигуру
получить при помощи поворота второй фигуры (на 90, 180 или 270 градусов) или
симметрии. Для этого опишем преобразования:
900
1800
2700
1→2
2→3
3→4
4→1
1→3
2→4
3→1
4→2
1→4
2→1
3→2
4→3
Обратный обход
(последовательность
читается справа налево)
1→3
2→4
3→1
4→2
Симметрия
1→1
2→4
3→3
4→2
При данных преобразованиях изменяется последовательность, которой
закодирована вторая фигура. После проведения каждого из преобразований нужно
проверять, можно ли получить первую последовательность из второй путем циклических
перестановок.
Симметрия наиболее сложное из преобразований, т. к. при применении симметрии
нарушается порядок обхода фигуры (фигура остается справа), для решения этой проблемы
данную фигуру нужно обойти в обратном обход (см. табл.), т.е. прочитать
последовательность справа налево и только после этого применять симметрию.
Если ни в одном из предыдущих шагов не был сделан вывод о равенстве фигур, то
фигуры не равны.
Задача 3. N человек покупают билеты в четырех кассах. Известно, что на обслуживание
k-го человека требуется tk минут. Распределите людей в 4 очереди таким образом, чтобы
общее время, потраченное на покупку билетов, было наименьшим.
Решение. Опишем массив из N элементов, в котором будем хранить время обслуживания
каждого человека tk. Так как по условию требуется распределить людей в 4 очереди, то
нам понадобится 4 массива, для описания каждой из очередей. В каждом из последних
Хабаровская краевая заочная физико-математическая школа
Статья по информатике из журнала МИФ-2 №2 за 2002 год
массивов выделим элемент, в котором будем хранить сумму времен людей, находящихся
в очереди в кассу. Исходя из этих допущений, напишем алгоритм решения задачи.
Алгоритм.
Дано: Последовательность чисел tk, задаваемая с клавиатуры в массив Time,
состоящий из N элементов.
Требуется: Построить 4 массива из исходного таким образом, чтобы сумма
элементов в каждом из построенных массивов была наименьшей.
Решение:
1. Отсортируем исходный массив по не возрастанию.
2. Расставим первых четырех человек в очереди в кассы.
3. Последующих людей будем расставлять по правилу: если сумма времени тех,
кто уже стоит в кассу и вновь добавляемого человека меньше, чем
максимальная сумма во всех кассах, то человек добавляется в очередь, иначе
проверяется следующая касса по тому же правилу. Если же ни в одной очередей
правило не выполняется, то человек помещается в ту очередь, где сумма
времени будет наименьшей.
Пример:
Пусть задан массив tk={5, 4, 3, 3, 3, 2, 2, 2, 2, 2, 1}
1-й
№
кассы шаг
1
2
3
4
5
4
3
3
Общее время
обслуживания
в кассе
5
4
3
3
2-й
шаг
5, 2
4, 2
3, 2
3, 2
Общее время
обслуживания
в кассе
7
6
5
5
3-й
шаг
5, 2
4, 2, 1
3, 2, 2
3, 3, 2
Общее время
обслуживания
в кассе
7
7
7
8
Задача 4. Задан алфавит из трех букв a, b, c. С помощью данного алфавита составлены два
слова. Определить имеют ли они одно значение. Известно, что при замене ab на ba, ac на
ca и cb на bc значение слов не меняется.
Решение. Основа решения данной задачи состоит в тщательном анализе данных.
Нетрудно заметить, что при заданных ограничениях на замены любую
последовательность символов можно привести к упорядоченной по возрастанию. Таким
образом, необходимо:
1) Сравнить количество символов в обеих последовательностях. Если они одинаковой
длины, то перейти к шагу 2, иначе сделать вывод о том, что слова разные по смыслу.
2) Сравнить количество вхождений каждой из букв алфавита в последовательности и при
равенстве сделать вывод, что одинаковы по смыслу, а иначе – разные.
Задача 5. Задан набор прямоугольников. Из них на плоскости складывается пирамида по
следующим правилам:
1. Каждый слой пирамиды состоит из одного прямоугольника.
2. Основание последующего прямоугольника полностью помещается на верхней стороне
предыдущего прямоугольника.
3. Размеры прямоугольников заданы.
Какую самую высокую пирамиду можно сложить из этих прямоугольников?
Решение. Анализ условия задачи показывает, что самую высокую пирамиду можно
составить из прямоугольников расположенных по убыванию наименьшей из сторон (т.к. в
условии задачи ничего не сказано о том, можно ли поворачивать прямоугольники). Таким
образом, решение данной задачи проходит в два этапа:
Хабаровская краевая заочная физико-математическая школа
Статья по информатике из журнала МИФ-2 №2 за 2002 год
(Упорядочивание прямоугольников). Повернем все прямоугольники так, чтобы за
ширину принималась наименьшая из сторон. Так как в задаче ничего не говорится о
выводе порядка построения пирамиды, то их можно не сортировать.
2)
Теперь можно найти высоту наибольшей пирамиды путем простого суммирования
высот.
Следует обратить внимание, что при решении задач мы не рассматривали вопросы,
связанные с оптимизацией. Эти вопросы мы рассмотрим в дальнейшем.
1)
Литература:
Кнут, Д.Э. Искусство программирования. Т. I – III, Москва, 2000.
Хабаровская краевая заочная физико-математическая школа
Download