Задача A. Сколько программ?

Автор:Зимние сборы 2005
Входной файл: jaina.in   Ограничение времени:2 сек
Выходной файл: jaina.out   Ограничение памяти:64 Мб

Условие

Женя любит программировать! Она уже выучила N конструкций! Жене интересно, сколько программ заданной длины L она может составить из этих конструкций. Помогите ей сосчитать программы!

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

Женя не требует, чтобы полученная программа компилировалась. Про компиляторы она еще не прочитала.

Формат входного файла

В первой строке входного файла содержится количество конструкций N, которые Женя уже выучила. Последующие N строк содержат сами конструкции. Длина никакой из конструкций не превосходит 255 символов. Если одна и та же конструкция встречается несколько раз, то её вхождения считаются различными, таким образом, Женя всегда рассматривает N различных конструкций.

Все строки содержат только символы с ASCII-кодами от 32 до 126. Кроме того, Женя хочет, чтобы пробелы в строках игнорировались (все остальные символы учитываются при подсчете длины).

В последней строке входного файла содержится число L.

Формат выходного файла

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

Ограничения

1 ≤ N ≤ 600, 1 ≤ L ≤ 600.

Примеры тестов

Входной файл (jaina.in) Выходной файл (jaina.out)
1
3
begin
clrscr
end
17
20

Задача B. Небольшая подтасовка

Автор:Зимние сборы 2005
Входной файл: small.in   Ограничение времени:1 сек
Выходной файл: small.out   Ограничение памяти:64 Мб

Условие

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

По новому плану столица будет разделена прямоугольной сеткой, в качестве сторон которой будут выбраны главные улицы и авеню. Все улицы и авеню проходят через весь город, имеющий форму прямоугольника, параллельно его сторонам (улицы — вертикально, а авеню — горизонтально). Нумерация начинается с левого нижнего угла. Город ограничивают четыре дороги: 1-я улица (левая граница), 100-я улица (правая граница), 1-я авеню (нижняя граница), 100-я авеню (верхняя граница). Очевидно, что эти дороги должны ограничивать округа, однако, не все дороги по плану будут являться границами округов. Кроме того, для соблюдения видимости честности Либеративы будут определять только вертикальные границы округов, в этом и заключается Ваш шанс, т.к. они вынуждены позволить Консервалам определять горизонтальные.

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

Формат входного файла

Входной файл описывает город, в котором нужно провести операцию. В первой строке задано N, количество кварталов, настроенных лояльно к Консервалам. В последующих N строках заданы номера улицы и авеню нижнего левого угла каждого из этих кварталов. В следующей строке записано S — количество вертикальных границ, которые поставят консервалы, и S номеров улиц в возрастающем порядке, на которых эти границы будут поставлены. В последней строке задано A — количество горизонтальных границ, которые Вам необходимо провести.

Формат выходного файла

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

Ограничения

A ≥ 2,

Примеры тестов

Входной файл (small.in) Выходной файл (small.out)
1
2
49 49 
50 50
2 1 100
3
3 1 50 100

Задача C. Лабиринт знаний

Автор:Зимние сборы 2005
Входной файл: maze.in   Ограничение времени:2 сек
Выходной файл: maze.out   Ограничение памяти:64 Мб

Условие

Участникам сборов подарили билеты на аттракцион ``Лабиринт знаний''. Лабиринт представляет собой N комнат, занумерованных от 1 до N, между некоторыми из которых есть двери. Когда человек проходит через дверь, показатель его знаний изменяется на определенную величину, фиксированную для данной двери. Вход в лабиринт находится в комнате 1, выход — в комнате N. Каждый участник сборов проходит лабиринт ровно один раз и наибрает некоторое количество знаний (при входе в лабиринт этот показатель равен нулю). Ваша задача — показать наилучший результат.

Формат входного файла

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

Формат выходного файла

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

Ограничения

1 ≤ N ≤ 2000 1 ≤ M ≤ 10000

Примеры тестов

Входной файл (maze.in) Выходной файл (maze.out)
1
2 2
1 2 5
1 2 -5
5

Задача D. Заправки

Автор:Зимние сборы 2005
Входной файл: filling.in   Ограничение времени:2 сек
Выходной файл: filling.out   Ограничение памяти:64 Мб

Условие

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

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

Формат входного файла

Во входном файле записано сначала число N, затем идет N чисел, i-ое из которых задает стоимость бензина в i-ом городе (все это целые числа из диапазона от 0 до 100). Затем идет число M — количество дорог в стране, далее идет описание самих дорог. Каждая дорога задается двумя числами — номерами городов, которые она соединяет. Все дороги двухсторонние (то есть по ним можно ездить как в одну, так и в другую сторону), между двумя городами всегда существует не более одной дороги, не существует дорог, ведущих из города в себя.

Формат выходного файла

В выходной файл выведите одно число — суммарную стоимость маршрута или &1, если добраться невозможно.

Ограничения

1 ≤ N ≤ 100

Примеры тестов

Входной файл (filling.in) Выходной файл (filling.out)
1
4
1 10 2 15
4
1 2 1 3 4 2 4 3
2
2
4
1 10 2 15
0
-1

Задача E. Форматирование таблицы

Автор:Зимние сборы 2005
Входной файл: format.in   Ограничение времени:2 сек
Выходной файл: format.out   Ограничение памяти:64 Мб

Условие

Вам предлагается отформатировать таблицу, данную во входном файле.

Формат входного файла

Первая строка входного файла содержит несколько букв l,c,r. Их количество равно количеству столбцов в таблице. Каждая буква задает расположение текста в соответствующем столбце ( l значит, что текст сдвинут до упора влево, с — что текст расположен по середине, r — что текст сдвинут вправо). Далее следуют не менее двух и не более 100 строк данных, каждая из которых задает соответствующую строку таблицы. Каждая строка содержит несколько записей, разделенных амперсантом ('&') Количество записей в каждой строке равно количеству столбцов. Каждая запись должна располагаться в соответствующем столбце. Первая строка данных задает заголовок таблицы, а остальные — тело таблицы. Знак '&' не содержится в ячейках таблицы.

Формат выходного файла

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

Ограничения

  1. длина любой строки входного файла не превышает 250 символов
  2. в таблице не более 100 строк
  3. в таблице не более 100 столбцов

Примеры тестов

Входной файл (format.in) Выходной файл (format.out)
1
lr
EXPRESSION&RESULT
2+2&4
2+2*2&6
+------------+--------+
| EXPRESSION | RESULT |
+------------+--------+
| 2+2        |      4 |
| 2+2*2      |      6 |
+------------+--------+
2
lcr
LEFT&CENTER&RIGHT
1&2&3
the&the&the
longest&longest&longest
kitten&kitten&kitten
blitz&blitz&blitz
+---------+---------+---------+
| LEFT    | CENTER  |   RIGHT |
+---------+---------+---------+
| 1       |    2    |       3 |
| the     |   the   |     the |
| longest | longest | longest |
| kitten  | kitten  |  kitten |
| blitz   |  blitz  |   blitz |
+---------+---------+---------+

0.053s 0.006s 15