Страница: 1 Отображать по:
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
256 megabytes

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

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

Чтобы разрешить свои проблемы, они обратились к вам. Для облегчения вашей задачи они выписали на бумажку все возможные варианты зашифрования букв, которые они могли применять, в виде набора пар «открытая буква» — «зашифрованная буква». Также вам известны все пары букв N-ского алфавита, которые могут следовать одна за другой в открытом тексте. Ваша задача состоит в том, чтобы по заданному зашифрованному слову сказать, соответствует ли ему хоть одно расшифрованное слово, единственен ли вариант расшифровки, и привести пример вариантов расшифровки слова. Слово \(\mathcal{A}\) считается возможной расшифровкой слова \(\mathcal{B}\), если, во-первых, его можно «зашифровать» (заменяя каждую букву на одну из соответствующих ей «зашифрованных» букв), получив слово \(\mathcal{B}\), и, во-вторых, каждая пара букв слова \(\mathcal{A}\), стоящих рядом, является допустимой для N-ского языка.

Входные данные

N-ский язык пользуется латинским алфавитом из 26 букв, регистр букв N-ское жюри не интересует, поэтому везде в открытом тексте используются большие буквы, а в закрытом — маленькие.

На первой строке входного файла находится одно целое число \(M\) (\(0 \leq M \leq 676\)) — число пар открытых — «зашифрованных» букв, указанных на бумажке, переданной N-ским жюри. Далее следуют \(M\) строк, на каждой находятся два символа — сначала открытая буква, потом вариант её «зашифрования». Пары не повторяются.

На следующей строке находится одно целое число \(K\) (\(0\leq K\leq 676\)) — число пар открытых букв, которые могут идти одна за другой. Далее следуют \(K\) строк, на каждой из которых по две открытые буквы, образующие такую пару. Пары не повторяются. Заметим, что возможна ситуация, когда последовательность букв “AB” в слове допустима, а “BA” — нет, в этом случае списке будет дана только пара “AB”, а пары “BA” не будет.

На следующей строке расположено одно целое число \(N\) (\(1 \leq N \leq 500\)) — длина зашифрованного слова, а на следующей строке — само слово (\(N\) маленьких латинских букв).

Может оказаться так, что какой-то открытой букве не соответствует ни одна «зашифрованная»; это означает, что эта буква в открытом тексте не использовалась.

Выходные данные

Если вариантов дешифрования нет ни одного, в первую строку выходного файла выведите “no”.

Если вариант дешифрования ровно один, в первую строку выходного файла выведите “only”, а во вторую — дешифрованное слово.

Если вариантов дешифрования больше одного, в первую строку выходного файла выведите “many”, а во вторую и третью — любые два различных варианта дешифрования слова.

Примеры
Входные данные
1
Uz
0
2
zz

Выходные данные
no

Входные данные
1
Uz
0
1
z

Выходные данные
only
U

Входные данные
2
Uz
Xz
3
UU
XX
XU
2
zz

Выходные данные
many
UU
XU

Входные данные
7
Aa
Az
Ax
Cz
Dv
Bx
Bz
5
AB
CA
BC
CB
DE
4
zzxx

Выходные данные
only
BCAB

ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
256 megabytes

Капитаны Флинт и Джек Воробей нашли клад и хотят поделить его. Клад находится в шкатулке и состоит из чётного числа драгоценных камней. Капитан Флинт оценил \(i\)-ый камень в \(a_i\) пиастров, а Джек Воробей — в \(b_i\) долларов. Теперь они действуют следующим образом. Джек Воробей достаёт из шкатулки два камня, после чего Флинт забирает себе один из них (естественно, тот, у которого больше \(a_i\)). Оставшийся камень достаётся Воробью. После этого Джек Воробей достаёт ещё пару камней, и так далее: каждым ходом Воробей достает из шкатулки два камня, Флинт забирает себе камень с большим \(a_i\), оставшийся камень достается Воробью.

Джек Воробей знает все \(a_i\), все \(b_i\), а также может, доставая очередные два камня, подглядеть в шкатулку и выбрать, какие именно камни надо доставать. Помогите ему действовать так, чтобы доля Воробья была максимально возможной (т.е. чтобы сумма \(b_i\) полученных Воробьём камней была как можно больше).

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

Входные данные

Первая строка входного файла содержит одно целое число \(N\) — количество камней в кладе. Гарантируется, что \(N\) чётное и что \(2\leq N\leq 5000\). Далее следуют две строки по \(N\) целых чисел в каждой: сначала заданы все \(a_i\), потом — все \(b_i\). Гарантируется, что все \(a_i\) различны (т.е. что действия Флинта всегда однозначно определены). Гарантируется, что все \(a_i\) и все \(b_i\) положительны и не превосходят \(400\,000\).

Выходные данные

В выходной файл выведите \(N/2\) строк по два числа в каждой — пары камней, в том порядке, как их должен доставать из шкатулки Джек Воробей. Камни нумеруются начиная с 1.

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

Примечание

Среди тестов будут такие, в которых каждый камень оба капитана оценивают одинаково: \(a_i=b_i\) для каждого \(i\) (как во втором тесте из примера); суммарная стоимость таких тестов будет 40 баллов.

Примеры
Входные данные
6
6 10 11 18 5 14
1 7 6 12 15 16

Выходные данные
5 1
2 3
6 4

Входные данные
6
6 44 2 43 7 48
6 44 2 43 7 48

Выходные данные
3 1
5 4
2 6

ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
256 megabytes

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

В автопарке компании есть \(n\) маршруток, \(i\)-ая маршрутка номинально вмещает \(a_i\) пассажиров. По договору с департаментом транспорта города компания обязана обслуживать \(m\) маршрутов. Накопленная статистика говорит, что оптимальнее всего, если \(j\)-ый маршрут обслуживает такси номинальной вместимостью \(b_j\) пассажиров. Каждая маршрутка приписывается не более чем к одному маршруту, каждому маршруту приписывается не более одной маршрутки.

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

  • если \(i\)-ая маршрутка обслуживает \(j\)-ый маршрут, то компания теряет \(|a_i-b_j|\) у.е., так как чем меньше заполнено такси, тем больше не используются его возможности, а чем больше переполнено такси, тем чаще его приходится ремонтировать;
  • от каждой простаивающей маршрутки, то есть такой, которой не назначен ни один маршрут, компания несет убыток \(p\) у.е.;
  • компании приходится платить штраф \(q\) у.е. департаменту транспорта за каждый не обслуживаемый маршрут.

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

Входные данные

В первой строке входного файла находятся четыре целых числа — \(n\), \(m\), \(p\), \(q\) (\(1\leq n,m \leq 10^3\), \(0 \leq p,q \leq 10^4\)).

Во второй строке через пробел указаны целые числа \(a_1\), ..., \(a_n\) (\(1\leq a_i \leq 10^4\)).

В третьей строке через пробел указаны целые числа \(b_1\), ..., \(b_m\) (\(1\leq b_j \leq 10^4\)).

Выходные данные

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

Примечание

В примере 1 первая маршрутка назначена на второй маршрут с потерями \(|22-20|=2\) у.е., вторая маршрутка назначена на первый маршрут с потерями \(|12-11|=1\) у.е.. Итого: потери 3 у.е..

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

Примеры
Входные данные
2 2 100 100
22 12
11 20
Выходные данные
3
Входные данные
2 1 100 500
13 13
13 
Выходные данные
100

Страница: 1 Отображать по:
Выбрано
:
Отменить
|
Добавить в контест