| |||||
|
|
ЗАДАЧА 1 . Хокку, танка, бронетранспортеры (10 сек.)В средневековой Японии в большом почете было искусство написания (часто экспромтом) коротких "белых" (без рифмы) n-стиший - хокку, танка, хайко и т.п. Готовые n-стишия такого рода могут быть найдены в текстах, написанных с другими целями, например в сообщениях программ об ошибках. Фраза считается соответствующей размеру n-стишия, если ее можно разбить на n строк так, чтобы в каждой строке было ровно заданное количество гласных букв. Заметим, что если фраза содержит слово без гласных букв, то она не соответствует формату. Разумеется, разбивать слова и переносить их части между строками нельзя. Запрещается также переставлять слова. Напоминаем, что к гласным буквам относятся следующие символы набора ASCII: A, E, I, O, U, Y, a, e, i, o, u, y . Входные данныеПервая строка входного файла содержит N + 1 целых чисел, записанных через пробел (0 < N < 11), которые задают размер стихотворения. Первое число из них - количество строк в стихотворении N. После него N чисел по порядку определяют количество гласных в соответствующих строках. Далее следуют фразы, которые необходимо проверить на соответствие размеру. Фраза занимает ровно одну строку. Ее длина не превышает 255 литер. В тексте используются только символы набора ASCII с кодами, не превышающими 127. Разделителем между словами считается только символ пробела. Количество фраз во входном файле £ 1000. Выходные данныеВ выходной файл нужно вывести фразы, удовлетворяющие заданному размеру, разбив их на строки в соответствии с этим размером. Множественные пробелы в исходной фразе следует заменять одним пробелом. Пробелов в начале и конце каждой строки не должно быть. После каждого стихотворения нужно вставлять пустую строку. Если в файле нет подходящих фраз, то в выходной файл нужно вывести одну пустую строку. Пример
В примере задается формат хайку: 3 строки, в первой строке 5 гласных букв, во второй - 7, и в третьей - 5. Затем приведены две фразы. Первая фраза удовлетворяет заданному формату, поэтому она записана в выходной файл в соответствующем виде. Вторая фраза, очевидно, этому формату не удовлетворяет. ЗАДАЧА 2. Лыжные маршруты (5 сек.)В окрестностях Новосибирска решили провести Открытый чемпионат Мира по лыжным гонкам. Желающих участвовать в нем очень много (особенно многочисленные команды приедут из Сибири, Канады и Африки), поэтому необходимо в короткое время провести отбор основных участников. Это значит, что соревнования нужно проводить одновременно на нескольких лыжных трассах. В тайге разместили N баз, куда участников соревнований должен доставлять вертолет. Между этими базами необходимо проложить лыжные маршруты так, чтобы два разных маршрута не пересекались. Между двумя различными базами может проходить только один маршрут. Любой маршрут должен начинаться на одной базе, а заканчиваться на другой, не проходя при этом через третью. Организаторов соревнований интересует, какое максимальное количество лыжных трасс можно проложить. Входные данныеВо входном файле записано одно целое число N (2 £ N £ 10000) количество лыжных баз. Выходные данныеВ выходной файл нужно вывести одно число - максимальное количество непересекающихся лыжных трасс. Пример
ЗАДАЧА 3. Сотовая связь (20 сек.)Сеть сотовой связи состоит из нескольких базовых станций. Сигнал каждой из станций принимается на определенной территории, называемой зоной приема. Зоны приема станций частично пересекаются. Их объединение образует зону приема сети в целом. Размещение базовых станций определяется различными соображениями, прежде всего - рельефом местности и ожидаемым количеством абонентов на данной территории. При этом никакие две станции с пересекающимися зонами приема не могут работать в одном частотном диапазоне. Оператор сотовой связи оплачивает занятые им частотные диапазоны, поэтому заинтересован в минимизации их количества. Вам дана карта размещения базовых станций и зоны их приема. Зона приема каждой станции представляет собой круг определенного радиуса. Считается, что зоны приема пересекаются, если пересечение соответствующих кругов содержит больше, чем одну точку. Требуется найти минимальное количество частотных каналов, необходимое для работы сети. Входные данныеПервая строка входного файла содержит целое число N - количество базовых станций (0 < N < 15). Следующие N строк содержат описания каждой станции: координаты X и Y и радиус зоны приема R, разделенные пробелами. Все координаты целочисленные, 0 < X, Y, R < 16000. Выходные данныеВ выходной файл нужно вывести одно целое число - минимальное количество частотных каналов. Пример
ЗАДАЧА 4. Наполеоны (10 сек.)Психам в бассейн наконец-то дали воду. Правда, совсем немножко - так, на донышке. Даже горки, образовавшиеся после их прыжков в безводный бассейн, не все затопило. И задумали как-то Наполеон первый, Наполеон второй и Наполеон третий (правда, кое-кто из историков утверждает, что их столько и не было, ну да у нас все возможно) образовать свое государство. Для этого решили они среди всех горок-островков выбрать три, да всю территорию внутри треугольника, образованного этими тремя островками, своей и объявить. При этом они, естественно, хотят, чтобы территория нового государства была бы как можно больше. Боюсь, что с этой задачей они не справятся - психи ведь, что с них взять. Помогите им. Входные данныеВ первой строке входного файла записано целое число N - количество горок (3 £ N £ 1000), и в последующих N строках - координаты этих горок x,y (пары целых чисел -30000 £ x,y £ 30000) через пробел. Выходные данныеВ выходной файл нужно выдать одно число - максимально возможную площадь треугольника с точностью до двух знаков после запятой. Пример
ЗАДАЧА 5. Династия фараонов (5 сек.)Совсем недавно археологи в Африке нашли родовую гробницу фараонов, о династии которых было мало что известно. Настенный рисунок в гробнице изображает родовое дерево фараонов и их сыновей. Надписи на стене настолько стерты, что археологи не могут точно восстановить имена фараонов, однако остатки изображения позволяют сузить круг возможных имен каждого фараона в родовом дереве до достаточно короткого списка. Также про эту династию известно, что было принято не давать своим сыновьям одинаковых имен, а также не называть своих сыновей своим собственным именем. Всего в династии использовалось не более 20 различных имен. Вам предстоит помочь археологам восстановить имена фараонов в родовом дереве по остаткам надписей, либо сделать вывод, что археологи неправильно трактуют стершиеся иероглифы на стенах. Входные данныеВо входном файле описывается родовое дерево фараонов, а также догадки археологов об их возможных именах. В первой строке содержится число N - количество фараонов в династии (N £ 50). Для удобства общения с археологами все фараоны пронумерованы числами от 1 до N. Далее идет множество пар чисел, записанных через пробел, каждая из которых означает, что фараон, занумерованный первым числом в паре, приходится отцом фараону, занумерованному вторым числом в паре. Множество пар отец-сын прерывается парой '0 0' в отдельной строке. В этом списке только один фараон не имеет отца - именно он является прародителем династии. В следующих N строках содержится информация о том, какие имена могли иметь фараоны, судя по остаткам надписей на стенах гробницы. В каждой строке перечисляются через пробел возможные имена фараона, имеющего соответствующий номер. Имена представляют собой последовательность символов латинского алфавита. Длина каждого имени не может быть больше 20. Регистр значения не имеет. Длина каждой строки с возможными именами фараонов не превосходит 255 символов. Выходные данныеВ выходной файл нужно вывести имена фараонов в порядке, соответствующем их номерам. Каждое имя на отдельной строке. Если не удается однозначно восстановить имена всех фараонов (недостаточно информации или археологи неправильно трактуют стершиеся иероглифы и дают противоречивые сведения), то в выходной файл требуется вывести одно слово 'NO'. Пример
ЗАДАЧА 6. Квадрат (5 сек.)В центре координатной плоскости находится квадрат со стороной 3 и координатами нижнего левого угла (-1.5, -1.5) и правого верхнего угла (1.5, 1.5). Этот квадрат разделен на девять квадратов со стороной 1, пронумерованных в соответствии со схемой:
Еще один квадрат со стороной 1 размещен таким образом, что его центр находится внутри квадрата ©5. Этот маленький квадрат повернут относительно осей координат на некоторый угол. Требуется указать номера квадратов, которые он пересекает. Входные данныеВходной файл состоит из одной строки, которая содержит три числа. Первые два числа - координаты центра маленького квадрата X и Y ( -0.5 £ X, Y £ 0.5). Это действительные числа, заданные с точностью до трех знаков после десятичной точки. Третье - целое число U (0 £ U < 90), задающее в градусах угол наклона стороны этого квадрата по отношению к вертикали по часовой стрелке. Выходные данныеВ выходной файл нужно вывести отсортированные по возрастанию номера квадратов, с которыми пересекается заданный квадрат. Номера квадратов нужно записать на одной строке через пробел. Примечание: Пересечением считается пересечение сторон. Если одна из вершин данного квадрата лежит на стороне одного из пронумерованных, то это считается пересечением. Пример
ЗАДАЧА 7. Оптимизация линейной программы (5 сек.)Линейный участок программы - это фрагмент программы с последовательным исполнением операций, не содержащий ветвлений и циклов по условиям. Например, это серия, состоящая из операторов присваивания с использованием входных, рабочих и выходных переменных в арифметических вычислениях. При переводе линейного участка в машинный код получается серия команд без переходов, в которой для каждой команды (кроме начальной и конечной) есть ровно одна предшествующая и одна последующая команда в порядке исполнения. Переменные исходной программы, а также значения, вырабатываемые каждой командой, располагаются в выделенных транслятором регистрах процессора или ячейках памяти. Однако схемы перевода, используемые в автоматических трансляторах, в силу разных причин изначально порождают далеко не самый оптимальный код. Поэтому в современных оптимизирующих трансляторах генерация кода сочетается с его оптимизацией. В данном случае вам на вход подаётся линейная программа на некотором машинном языке, порожденная некоторым простым неоптимизирующим транслятором. Также задан фиксированный набор оптимизирующих преобразований. Путем применения этих преобразований (и только их) к исходной программе требуется получить программу, вычисляющую те же результаты, и к которой ни одно из этих преобразований больше не применимо - то есть, программу, функционально эквивалентную исходной и оптимальную по отношению к данному набору преобразований. Описание входного языка: 1. Программа - это последовательность строк, каждая из которых содержит одну команду. Команды исполняются в порядке их записи в программы. 2. Общий
формат команды: 3. Набор
команд: 4. Регистры, в которые не производится засылка значений до первого использования в программе, считаются входными аргументами программы. Их значения определены, но неизвестны. 5. Последней
строкой программы считается список значимых результатов в виде: 6. Программа исполняется в последовательности записи команд.
Описание оптимизирующих преобразований: 1.
Просачивание константы. Если операнд-регистр в некоторой
команде содержит известное значение, операнд-регистр заменяется на
операнд-константу, представляющую это значение: 2. Константное
вычисление. Если результат арифметической команды может быть вычислен,
исходя из известных значений ее аргументов или при любых аргументах, команда
заменяется на засылку вычисленного значения: ADD P Q 0 à MOV P Q MUL S 1 T à MOV S T SUB D A A à MOV D 0 (см.также последнюю строку в примере на преобразование 4). 3.
Удаление бесполезного вычисления. Если результат вычисления или
засылки не используется в дальнейшем, и регистр не указан в списке результатов
программы, команда удаляется: {код, не использующий R} {команда с результатом R} 4.
Удаление бесполезной пересылки. Если в регистр засылается
значение, тождественное его собственному, команда засылки удаляется. Два
значения считаются тождественными, если: а) они известны и численно равны; б)
они оба получены в результате цепочки пересылок одного и того же неизвестного значения. Входные данныеФайл строк, представляющих корректную исходную программу. Число строк не больше 1000. Все числовые константы на входе - неотрицательные. Выходные данныеФайл строк, представляющих корректную выходную программу, оптимальную по отношению к данному набору оптимизирующих преобразований. Все слова в строке выводятся заглавными буквами и разделяются одиночным пробелом, константы не содержат незначащих нулей. Список регистров-результатов в команде RES упорядочен по алфавиту. Пример
Комментарий: Несмотря на очевидный следующий шаг к тривиальному: MOV R A RES R при данном наборе преобразований такая оптимизация не реализуется.
ЗАДАЧА 8. Аппроксимация (10 сек.)Василий Иванович - человек прямой. По этой причине он только прямые линии и умеет рисовать. Но уж прямые-то он рисует мастерски. Просто загляденье. Какую хочешь, такую и проведет. А Петька ему все какие-то неправильные функции подсовывает - то кубическую параболу, то вида c*exp(k*x), то еще чего. И вынужден бедный Василий Иванович прямыми Петькину функцию как можно лучше и как можно дальше приближать, не выходя при этом за рамки дозволенной суммы квадратов отклонений в заданных точках xi. Так и мается, бедняга. Помогите ему. Итак, заданы точки xi = x0+h*i (0 £ i £ N, 0 < N £ 200000, 0.1 £ h £ 1, 0 £ x0 £ 103) и значения аппроксимируемой функции FA в этих точках. Необходимо провести аппроксимирующую прямую FL(x) на как можно более длинном начальном участке x0 ... xm, так, чтобы сумма квадратов отклонений в этих точках исходной и аппроксимирующей функции была не больше заданной погрешности E (0.1 £ E £ 1): . Входные данныеПервая строка входного файла содержит четыре числа Е, x0, N, h, записанные через пробел. Е, x0 и h задаются с точностью до двух знаков после запятой. Далее в N +1 строках задаются значения исходной функции FA в соответствующих точках по порядку от x0 до xN с точностью до 5 знаков после запятой (-10 £ FA(xi)£ 10, 0 £ i £ N ). Выходные данныеВ выходной файл нужно записать одно целое число m - максимально возможную длину участка аппроксимации. Пример
|
|