---> 10 задач <---
Источники
    Личные олимпиады(938 задач)
    Командные олимпиады(684 задач)
Страница: << 1 2 Отображать по:
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
64 megabytes

Напишите программу, которая посчитает количество смайликов в заданном тексте.

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

  • первым символом является либо ; (точка с запятой) либо : (двоеточие) ровно один раз
  • далее может идти символ (минус) сколько угодно раз (в том числе символ минус может идти ноль раз)
  • в конце обязательно идет некоторое количество (не меньше одной) одинаковых скобок из следующего набора: (, ), [, ].
  • внутри смайлика не может встречаться никаких других символов.

Например, нижеприведенные последовательности являются смайликами:

:)

;---------[[[[[[[[

в то время как эти последовательности смайликами не являются (хотя некоторые из них содержат смайлики):

:-)]

;--

-)

::-(

:-()

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

Формат входных данных

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

Формат выходных данных

Выведите одно число — количество смайликов, которые встречаются в тексте.

Примеры
Входные данные
:);------[[[[[]
Выходные данные
2
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Компания MacroHard разработала новый язык программирования PASCAL++. В этом языке имеется оператор вывода PrintLn, с помощью которого можно выводить строки любой длины. По стандарту языка, разработанному специалистами компании, некоторые комбинации символов в строке должны при выводе играть особую роль:

Комбинация Значение
\n Переход на новую строку
\t Вывод K пробелов (1 ≤ K ≤ 7), после чего курсор оказывается на позиции, имеющей номер вида 7N+1 (первая позиция каждой строки имеет номер 1).
\\ Вывод символа "\".
\XY, где X и Y – шестнадцатеричные цифры (0..9, A..F или a..f), причем \(XY \geq 20\) Вывод символа, имеющего ASCII код XY

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

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

Входной файл содержит одну или несколько строк, каждая из которых является результатом работы неправильного оператора PrintLn. Размер файла не превышает 100000 байт.

(Все символы "\", встречающиеся во входном файле участвуют в создании какой-либо ключевой комбинации, т.е. сразу после любой последовательности, состоящей из нечетного количества подряд идущих символов "\", следует символ из набора {"n", "t", "\", "0".."9", "A".."F", "a".."f" }, причем в случае символа из множества {"0".."9", A".."F", "a".."f"}, затем следует еще один символ из этого множества.)

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

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

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

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

В 2030 году Очень Известная Компания выпустила новую клавиатуру. Разработчики решили избавиться от всех ненужных кнопок и оставить только кнопки с первыми \(A\) буквами латинского алфавита. Новая клавиатура пользуется большой популярностью, поэтому Петя решил научиться печатать на ней свое любимое слово (оно не содержит букв, отличных от первых \(A\) букв латинского алфавита).

Петя считает, что он научился, когда на экране можно будет увидеть его любимое слово целиком (то есть найдется последовательность подряд идущих букв, образующих его любимое слово). Например, если Петино любимое слово - "apple", и на экране написано "pineappled", то любимое слово увидеть можно, а если на экране написано "mapplicе", то нельзя. Петя запустил текстовый редактор, и пытается, совершив как можно меньше нажатий на клавиши, добиться появления своего любимого слова.

У Пети есть друг Вася, который хочет, чтобы Петя, напротив, совершил как можно больше нажатий на клавиши - так он лучше научится. В любые моменты (как до того, как Петя начал набирать текст, так и между нажатиями Пети на клавиши) Вася может отпихивать Петю от клавиатуры и печатать на ней что угодно. При этом ни Петя, ни Вася не могут стирать уже напечатанные символы. Суммарно Вася может сделать не более \(K\) нажатий на клавиши (не обязательно подряд), после этого Петя выгонит его из комнаты, и Вася больше никак не будет участвовать в процессе обучения.

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

Напишите программу, которая определит общее количество Петиных нажатий на клавиши, после которого он гарантированно увидит свое любимое слово.

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

В первой строке входного файла содержатся три целых числа: \(N\), \(A\), \(K\) - длина любимого слова Пети, количество кнопок на клавиатуре и максимальное количество нажатий кнопок Васей соответственно. В следующей строке содержится слово длины \(N\), состоящее из строчных латинских букв - любимое слово Пети. Слово завершает перевод строки.

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

Выведите одно число - искомое количество нажатий клавиш.

Примечания

Тесты состоят из четырёх групп.

  1. Тесты 1--3, из условия, оцениваются в 0 баллов.
  2. В тестах этой группы \(1 \le N < A \le 26\), \(1 \le K \le 100\). Эта группа оценивается в 30 баллов, баллы начисляются только при прохождении всех тестов группы (при этом прохождения всех тестов из условия не требуется).
  3. В тестах этой группы \(1 \le N \le 300\), \(1 \le A \le 26\), \(1 \le K \le 300\). Эта группа также оценивается в 30 баллов, они начисляются только при прохождении всех тестов группы.
  4. Offline-группа, \(1 \le N \le 100\,000\), \(1 \le A \le 26\), \(1 \le K \le 10^9\). Баллы за тесты этой группы начисляются только при прохождении всех тестов 1-й и 2-й групп. Эта группа оценивается в 40 баллов, они начисляются только при прохождении всех тестов группы.

Примеры
Входные данные
2 1 2
aa
Выходные данные
2
Входные данные
3 4 3
abc
Выходные данные
9
Входные данные
3 2 1
aab
Выходные данные
4
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
64 megabytes

Испытывая глубочайшую ненависть к e-mail адресам, Илья "цензурирует" каждый встречающийся текст, заменяя e-mail адреса словом censore, циклически записанным по длине e-mail. Однако у Ильи очень странные представления о e-mail адресах и о том, как следует "цензурировать" тексты. В представлении Ильи e-mail адрес записывается следующим образом: <имя><@><сайт><.><домен>

Имя представляет собой последовательность символов с кодами от 33 до 127. В имени не могут встречаться символы "@" или ".", если нет вложенных e-mail, но об этом речь пойдет ниже.

Сайт - последовательность латинских букв, хотя бы одна из которых должна быть заглавной.

Домен - 2 прописные латинские буквы.

Илья без проблем может написать программу, цензурирующую текст, но его беспокоит то, что в имени после символа "%" может быть другой e-mail. Например, so%another@Olymp.rume@Mcc.ru. В таком случае Илья вырезает весь e-mail адрес со всеми вложенными и заменяет в нем каждый символ, кроме "%", на количество стоящих до него в адресе символов "%". Символы % в таком случае удаляются. Пример такого цензурирования: so%an%oth@M.ruer@T.rume@Mccme.ru станет 001122222222222222222222222222.

Однако наличие символа "%" еще не говорит о том, что после него идет вложенный e-mail, то есть "%" может просто являться частью имени. Пример: some%answer@Mccme.ru станет censorecensorecensor. Помогите Илье написать такую программу.

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

Единственная строка, длиной не более 255 символов. Гарантируется, что вложенность неправильных e-mail не превышает 8.

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

Выведите строку в цензурированном виде.

Примеры
Входные данные
!hello@World.ru
Выходные данные
censorecensorec
Входные данные
so%another@Olymp.rume@Mccme.ru
Выходные данные
00111111111111111111111111111

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