Строки(121 задач)
Целые числа(112 задач)
Битовые операции(28 задач)
Логический тип(3 задач)
Структуры(18 задач)
Вещественные числа(33 задач)
Множества(16 задач)
Словари(21 задач)
«Знание наперед нельзя получить от богов и демонов,
нельзя получить и путем умозаключений по сходству,
нельзя получить и путем всяких вычислений.
Знание положения противника можно получить
только от людей» (Сунь Цзы, «Искусство войны»)
Для поднятия престижа Короны среди граждан Королевства, Его Величеству Бубею Второму понадобилась небольшая победоносная война. В качестве цели был выбран маленький приграничный город. Королевским шпионам было дано задание узнать численность войск, находящихся в городе. Так как ежедневно пересчитывать всех солдат в целом городе очень сложно, то было решено что такой подсчет будет сделан только один раз. Затем шпионы будут только наблюдать за прибывающими или убывающими из города частями (уже не с точностью до одного человека, а с точностью до войсковой единицы: взвод, рота, полк) и ежедневно докладывать в Столицу.
Однако не все войсковые единицы противника могут состоять из одинакового числа солдат. Поэтому для каждой такой единицы в Военном Министерстве введены специальные поправки.
Пусть известно начальное количество солдат противника в городе и известно какие войсковые единицы и в каком порядке покидали город или входили в него. Напишите программу, которая по этим данным вычислит максимально возможное количество солдат в городе на текущий момент.
В первой строке файла input.txt записано начальное количество солдат (целое, положительное, не превышает 3000). Во второй строке записано число P (целое, положительное, не более 10) – количество названий разных войсковых единиц в армии потенциального противника. Следующие P строк имеют такой формат: <название войсковой единицы><численность><поправка>. Название войсковой единицы – строка, содержащая только заглавные буквы английского алфавита длины не более 10 символов. Численность – целое положительное число не более 10000, поправка – целое положительное число не более 100.
Пример такой строки:
BRIGADE 2000 50 – это означает что в войсковой единице BRIGADE может быть от 1950 до 2050 солдат (поправка действует в обе стороны).
В следующих строках файла указаны данные из донесений шпионов по одному донесению в строке. Формат донесения <знак><название войсковой единицы>, где знак ‘+’ означает что единица вошла в город, ‘-’ – что единица покинула город. Гарантируется, что количество солдат в городе в любой момент времени не превышает \(10^6\).
Количество солдат также не может быть отрицательным (гарантируется, что входные данные непротиворечивы).
В файл output.txt выведите единственное число – максимально возможную численность солдат в городе.
Комментарий к первому примеру: было 500 солдат, затем в город вошла BRIGADE численностью от 900 до 1100 (максимально 1100, поэтому прибавляем это число), затем вошла ARMY численностью от 2500 до 3500, а в конце BATTALION (от 450 до 550 человек).
Комментарий ко второму примеру: было 500 солдат, затем BATTALION (от 450 до 550) покинул город. В городе осталось от 0 до 50 солдат, берем максимальное по условию. Затем в город вошло от 450 до 550 солдат).
500 3 BATTALION 500 50 BRIGADE 1000 100 ARMY 3000 500 +BRIGADE +ARMY +BATTALION
5650
500 1 BATTALION 500 50 -BATTALION +BATTALION
600
«Все пять разрядов шпионов работают, и
нельзя знать их путей. Это называется
непостижимой тайной. Они — сокровище для
государя» (Сунь Цзы, «Искусство войны»)
Для тайной переписки с агентами в других королевствах министры Его Величества Бубея Второго изобрели хитрое шифровальное устройство, которое представляет собой два диска, насаженных на одну ось. Каждый диск имеет 27 делений, подписанных заглавными буквами английского алфавита и пробелом.
В качестве государственного в Королевстве принят английский алфавит, причем для упрощения системы образования все знаки препинания (а также прочие специальные символы, за исключением пробелов) отменены, а буквы оставлены только заглавные.
На обоих дисках (большом и маленьком) буквы расположены в алфавитном порядке по часовой стрелке. Пробел расположен между буквами ‘A’ и ‘Z’. Маленький диск является подвижным и может поворачиваться вокруг своего центра. Шифрование сообщения происходит следующим образом: сначала выбирается начальное положение маленького диска (напротив какой буквы большого диска будет располагаться буква ‘A’ маленького). Затем определяется величина смещения N (целое, по модулю не превышает 26). Если N положительно, то во время шифрования диск будут вращать по часовой стрелке, если отрицательно, то против часовой стрелки на N делений.
Берется первый символ шифруемого текста и находится на маленьком диске. В шифровку записывается символ с большого диска, который сейчас расположен напротив данного. После этого маленький диск поворачивают и повторяют операцию для второго символа. Затем диск вновь поворачивают и так далее, пока сообщение не закончится.
Напишите программу для шифрования сообщений таким методом. В задаче можно использовать входной и выходной файлы или стандартный ввод и вывод (но не то и другое одновременно).
В первой строке файла input.txt записан символ, напротив которого находится буква ‘A’ маленького диска при начале шифрования. Во второй строке записано число \(N\), в третьей – исходное сообщение.
В файл output.txt выведите зашифрованное сообщение.
A 1 AAAA
ABCD
B -1 AAAA
BA Z
На кольце нанесена надпись, состоящая из заглавных английских букв и пробелов. Суммарное количество символов в надписи не превышает 180.
Надпись нанесена таким образом, что:
1. все буквы (даже пробелы) имеют одинаковую ширину (то есть дуги, соответствующие каждому символу одинаковы);
2. надпись охватывает все кольцо, между последним и первым символом нет пробела.
Юля смотрит на кольцо со стороны \(k\)-го символа от начала надписи (символы нумеруются с 1, слева направо).
Определите, какую часть надписи видит Юля.
Вывести следует только символы, видимые целиком.
Символ считается видимым, если угол между его дальней границей и линией взгляда составляет не более 60 градусов.
На первой строке вводится число \(k\) (натуральное, не превышает длины надписи). На второй строке - текст надписи (строка, не короче 3 и не длиннее 180 символов, состоящая из заглавных английских букв и пробелов.
Требуется вывести строку - часть надписи, которая будет видимой при данном положении кольца.
2 ABCD
B
Чтобы прославить свое имя в будущих поколениях, Его Величество Бубей Второй задумал грандиозную реформу календаря для своих подданных. К уже имеющимся в календаре \(X\) месяцам планируется добавить еще один, и назвать его по имени короля. Естественно, новый месяц Его Величество пожелал сделать первым, чтобы с его именем у подданных начинался новый год.
Естественно, такая реформа привела в ужас торговцев и производителей различных товаров, так как для удобства покупателей необходимо перемаркировать все товары новыми датами годности. Напишите программу, которая по дате в старом календаре будет вычислять дату в новом.
До реформы календарь был устроен таким образом: год состоял из \(N\) дней, которые были равномерно (то есть в каждом месяце одинаковое количество дней) разделены на \(X\) месяцев. По счастливой случайности при введении нового месяца также получается равномерное распределение дней (гарантируется в исходных данных).
В первой строке файла input.txt записано число \(N\) (целое, положительное, не превышает 30000) – количество дней в году, во второй строке записано число \(X\) – количество месяцев, которое было в календаре до королевской реформы (целое, положительное, не превышает \(N-1\)), в третьей строке записаны два числа – дата по старому календарю (номер дня и номер месяца).
В файл output.txt выведите номера дня и месяца, соответствующие указанной старой дате в новом календаре.
Комментарий к первому примеру: был год в 48 дней, то есть 2 месяца по 24 дня в каждом; 24 день 2-го месяца – это последний день такого года. Когда добавился один месяц – их стало 3, по 16 дней в каждом, то есть последний день года будет 16-м числом 3-го месяца.
48 2 24 2
16 3
48 3 15 1
3 2
Некоторый алгоритм шифрования устроен следующим образом.
Исходная строка разбивается на блоки по 36 символов. Если в конце остается часть, которой недостаточно для полного блока, то она не шифруется.
Шифрование происходит с помощью квадратного трафарета, в котором имеется 9 прорезей для записи символов.
Пример трафарета показан на рисунке.
Например, если в начале блока шло слово «Криптография», то его символы будут расположены вот так:
Символы из таблицы выписываются в порядке слева направо и сверху вниз - таким образом получается зашифрованный блок.
Затем трафарет возвращается в исходное положение и операция повторяется для остальных блоков.
Гарантируется, что трафарет корректен (то есть в процессе шифрования одного блока над каждой клеткой таблицы прорезь появляется ровно один раз).
Дана строка, состоящая из английских букв (заглавных и строчных) и пробелов. Также дан трафарет. Напишите программу шифрования данной строки по трафарету.
В первой строке находится исходный текст (одна непустая строка длинной не более 200 символов).
В следующих 6 строках описан трафарет в следующем формате: закрытая клетка обозначается символом ‘#’ (решетка), прорезь обозначается символом ‘.’ (точка).
Например, трафарет из условия задачи будет вводиться так:
.##### #..### ###.## .###.# ###### #..#.#
Выведите строку, полученную в результате шифрования исходного текста.
ABCDE .##### #..### ###.## .###.# ##### #..#.#
ABCDE