Фирма Macrohard разработала новый язык программирования: P--. В этом языке имеется K типов целых чисел – int, longint, longlongint, …, longlong…longint (K-1 раз long). Числа этих типов могут принимать значения в диапазонах 0..M0, 0..M1, …, 0..MK-1 соответственно.
Также, в этом языке имеется процедура вывода writef, которая имеет неограниченное количество параметров. В качестве первого параметра она получает строку, а в качестве второго и последующих может получать числа любого из поддерживаемых типов. При этом вывод осуществляется следующим способом: выводится строка, переданная первым параметром, в которой произведена подстановка параметров, а именно, вместо %i подставляется число типа int, вместо %li – число типа longint, вместо %ll…li (j букв l) – число типа longlong…longint (j раз long). Вывод числа осуществляется в системе счисления с основанием B (2 B 36).
Цифрами в системе счисления с основанием B являются обычные десятичные цифры и, если их недостаточно, заглавные буквы латинского алфавита в алфавитном порядке. Например, 10010=4С22, 126010=Z036.
При этом тип передаваемых параметров должен совпадать с соответствующими шаблонами. Например, если M0=300, M1=3000, M2=1000000, B=10, то writef(“hello %i%li”, 300, 500) выведет “hello 300500”.
Дана строка, которую вывела некоторая процедура writef. Выясните, какая самая короткая строка могла быть передана передана этой процедуре в качестве первого параметра. Например, для приведенного выше примера, это могла быть строка “hello %lli”.
На первой строке входного файла находятся числа K и B (1 K 50, 2 B 36). Следующая строка содержит числа M0, M1, …, MK-1 (0 M0 M1 … MK-1 109, числа заданы в десятичной системе счисления). На следующей строке находится текст, выведенный некоторой процедурой writef. Длина текста не превышает 200 символов. Текст не содерждит символов "%".
Выведите в выходной файл самую короткую строку, которая могла быть передана процедуре writef в качестве первого параметра. На второй строке перечислите все остальные параметры, которые были ей переданы, числа выводите в десятичной системе счисления и разделяйте ровно одним пробелом.
Если решений несколько, достаточно выдать любое.
3 10 300 3000 1000000 hello 300500
hello %lli 300500
1 4 1 hello 111
hello 111
1 2 10 hello 111
hello %i 7
Город, в котором живет Петя имеет вид прямоугольника, улицы в нем образуют сетку MxN. Перед каждым перекрестком на подъезде к нему может стоять дорожный знак. Также знак может стоять после перекрестка у въезда на улицу.
В городе встречаются следующие виды дорожных знаков: знаки, установленные перед перекрестком – поворот только направо (R), поворот только налево (L), только проезд прямо (F), поворот налево запрещен (NL), поворот направо запрещен (NR), проезд прямо запрещен (NF); знаки, установленные после перекрестка – проезд запрещен (S), максимальная скорость до ближайшего перекрестка – X км/ч. (!X). В отсутствие ограничивающего знака максимальная скорость равна Y км/ч. Длина всех улиц одинакова и равна L метров. Разворачиваться на перекрестке и ехать в строго противоположном направлении не разрешается.
Петя живет в доме около перекрестка, где пересекаются xs-я вертикальная и ys-я горизонтальная улицы (улицы нумеруются, начиная с 1). Петин папа работает на заводе около перекрестка, где пересекаются xd-я вертикальная и yd-я горизонтальная улицы. Помогите Пете выяснить, какое минимальное время требуется папе, чтобы доехать на работу, если Петин папа – законопослушный водитель и соблюдает все правила дорожного движения.
Первая строка входного файла содержит целые числа M, N (1 M, N 20), Y (1 Y 80), L (1 L 10000), xs, ys, xd и yd (1 xs, xd N, 1 ys, yd M, (xs, ys) (xd, yd)).
Следующие MN строк содержат информацию о знаках, расположенных на соответствующих перекрестках (порядок перечисления перекрестков следующий: сначала идут перекрестки, расположенные на 1-й горизонтальной улице, в возрастающем порядке номеров вертикальных улиц, затем перекрестки, расположенные на 2-й горизонтальной улице, и т.д.)
Формат информации о знаках следующий: описания знаков разделяются запятыми, сначала идет буква латинского алфавита, означающая направление, в котором уходит с перекрестка улица, на которой стоит знак, затем после двоеточия идет обозначение знака (направления обозначаются буквами N, S, E и W – см. рисунок). После последнего знака идет точка. По типу знака понятно, находится он до или после перекрестка. Ограничение скорости – целое число, 1 X 80.
Выведите в выходной файл единственное число – округленное до ближайшего целого минимальное количество секунд, необходимое Петиному папе, чтобы добраться до работы (допускается ошибка в 1 секунду).
3 4 60 5000 2 2 4 3 . . S:NL. . E:L. N:S,E:S,S:S,W:!25. S:NR. . . E:!72,N:!80,W:!15. E:!10. .
3070
Рассмотрим прямоугольник размером X × Y, из середины которого вырезали прямоугольник размером (X – 2) × (Y – 2). Назовем такую геометрическую фигуру рамкой размера X × Y. На рисунке 1 изображена рамка размера 5 × 6.
Рисунок 1. Рамка 5 × 6 |
Рисунок 2. Рамка 5 × 6, замощенная плитками 3 × 1 |
Предположим, что у нас имеется неограниченный запас плиток размера A × 1. Рассмотрим следующую задачу: можно ли полностью замостить рамку размера X × Y такими плитками (плитки разрешается поворачивать на 90 градусов). Например, рамку 5 × 6 можно полностью замостить плитками размера 3 × 1 (один из способов показан на рисунке 2), а плитками размера 4 × 1 – нельзя.
Первая строка входного файла содержит два целых числа – X и Y (3 ≤ X, Y, ≤ 106). Вторая строка содержит число N – количество видов плиток, которые следует проанализировать (1 ≤ N ≤ 1000). Третья строка содержит N натуральных чисел, не превышающих 106. Обозначим i-ое число третьей строки входного файла за Ai.
Выведите в выходной файл N строк, i-ая строка должна содержать слово yes, если можно замостить рамку размера X × Y плитками размера Ai × 1, и no в противном случае.
5 6 2 3 4
yes no
Фирма "Макрохард" изобрела новое устройство с целью облегчить труд людей, кому по долгу службы приходится чертить много чертежей, а также школьников, изучающих черчение. Это устройство представляет собой крошечного робота, который умеет ползать по клетчатому листу бумаги. При этом в начале он обязательно должен быть расположен на пересечении линий сетки.
Этот робот умеет выполнять программу, которая может состоять из команд E,W,N,S — переместиться по листу в соседнюю вершину сетки вправо, влево, вперед, назад соответственно. Перемещаясь в соседний узел сетки, робот оставляет за собой ровную линию. При этом по правилам техники безопасности ему категорически запрещается проводить дважды одну и ту же линию, так как при попытке провести линию второй раз, он очень сильно пачкается в своих же собственных чернилах (они очень долго сохнут), и выходит из строя.
При этом, правда, через одну и ту же вершину сетки робот может проходить дважды. Возможно два случая (более толстой линией показано, как мы проезжаем через вершину в первый раз, более тонкой - во второй).
В первом случае мы оба раза проезжаем через вершину "прямо" (будем называть это самопересечением маршрута), а во втором случае — оба раза "поворачиваем" (это будем называть самокасанием).
Разработчики также установили, что в случае самопересечения маршрута робот пачкается в своих чернилах сильнее, чем в случае самокасания, и, если самопересечения встречаются часто, быстро выходит из строя. Поэтому они решили написать для него внутренний оптимизатор программы.
Вам дается программа для робота. Требуется изменить ее так, чтобы узор, получающийся в конце ее работы, был таким же, но при этом при работе робота не возникало самопересечений маршрута.
В первой строке входного файла содержится программа для робота. Таким образом, в первой строке входного файла могут встречаться только символы E,W,N,S, а также пробельные символы, которые должны игнорироваться. Общая длина строки (включая пробельные символы) не превышает 200 символов.
В выходной файл вы должны вывести одну строку с оптимизированной программой. Эта строка должна удовлетворять тем же условиям, что и входная строка.
EENWSSWNN
ENESWSWNN
Дано множество точек на плоскости, которое обладает следующим свойством: среди любых четырех из заданных точек три лежат на одной прямой.
Требуется найти ломаную, которая имеет минимальную длину и проходит через все заданные точки.
Первая строка входного файла содержит число N – количество точек (3 ≤ N ≤ 1000). Следующие N строк содержат координаты точек – пары целых чисел, не превышающих 10000 по абсолютной величине. Никакие две точки не совпадают.
Выведите в выходной файл длину искомой ломаной с точностью не менее 10-3.
4 0 0 1 0 2 0 1 1
3.41421356237309505