Темы --> Информатика --> Алгоритмы --> Обработка текста
    Конечные автоматы(10 задач)
    Разбор выражений(17 задач)
---> 31 задач <---
Источники
    Личные олимпиады(938 задач)
    Командные олимпиады(684 задач)
Страница: << 1 2 3 4 5 6 7 >> Отображать по:
ограничение по времени на тест
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++.

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

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

Многие системы форматирования текста, например TEX или Wiki, используют для разбиения текста на абзацы пустые строки. Текст представляет собой последовательность слов, разделенных пробелами, символами перевода строк и следующими знаками препинания: «, «, «, «, «, « и «’» (ASCII коды 44, 46, 63, 33, 45, 58, 39). Каждое слово в тексте состоит из заглавных и прописных букв латинского алфавита и цифр. Текст может состоять из нескольких абзацев. В этом случае соседние абзацы разделяются одной или несколькими пустыми строками. Перед первым абзацем и после последнего абзаца также могут идти одна или несколько пустых строк.

Дальнейшее использование исходного текста предполагает его форматирование, которое осуществляется следующим образом. Каждый абзац должен быть разбит на строки, каждая из которых имеет длину не больше \(w\). Первая строка каждого абзаца должна начинаться с отступа, состоящего из \(b\) пробелов. Слова внутри одной строки должны быть разделены ровно одним пробелом. Если после слова идет один или несколько знаков препинания, они должны следовать сразу после слова без дополнительных пробелов. Если очередное слово вместе со следующими за ним знаками препинания помещается на текущую строку, оно размещается на текущей строке. В противном случае, с этого слова начинается новая строка. В отформатированном тексте абзацы не должны разделяться пустыми строками. В конце строк не должно быть пробелов.

Требуется написать программу, которая по заданным числам \(w\) и \(b\) и заданному тексту выводит текст, отформатированный описанным выше образом.

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

Первая строка входного файла содержит два целых числа: \(w\) и \(b\) (\(5 \le w \le 100\), \(1 \le b \le 8\), \(b \lt w\)).

Затем следует одна или более строк, содержащих заданный текст. Длина слова в тексте вместе со следующими за ними знаками препинания не превышает \(w\), а длина первого слова любого абзаца вместе со следующими за ним знаками препинания не превышает \((w - b)\).

Название входного файла: formatting.in

Название выходного файла: formatting.out

Размер входного файла не превышает 100 Кбайт. Длина каждой строки во входном файле не превышает 250.

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

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

Примечание

Правильные решения для тестов, в которых заданный текст состоит из одного абзаца и входной файл не содержит пустых строк, будут оцениваться из 30 баллов.

Правильные решения для тестов, в которых соседние слова разделены ровно одним пробелом и все знаки препинания следуют сразу за словами и не отделены от них пробелами или символами перевода строк, будут оцениваться из 30 баллов.

Примеры
Входные данные
20 4
Yesterday, 
All my troubles seemed so far away, 
Now it looks as though they're here to stay, 
Oh, I believe in yesterday. 

Suddenly, 
I'm not half the man I used to be, 
There's a shadow hanging over me, 
Oh, yesterday  came suddenly...
Выходные данные
    Yesterday, All
my troubles seemed
so far away, Now it
looks as though
they' re here to
stay, Oh, I believe
in yesterday.
    Suddenly, I' m
not half the man I
used to be, There' s
a shadow hanging
over me, Oh,
yesterday came
suddenly...

Дано число. Требуется определить, корректно ли оно. Число может быть записано в 2-ух формах:

- обычной

- экспоненциальной

Число в обычной форме не должно содержать ведущих нулей. Знак "-" должен стоять только перед непололожительным числом и только в одном экземпляре. Число также может быть записано в двоичной, восьмеричной или шестнадцатиричной системе счисления. В различных системах счисления число будет иметь вид:

<%0x><обычная форма> - в шестнадцатиричной (состоит из цифр и маленьких латинских букв). Число знаков после "0x" не должно превышать 16.

<%0o><обычная форма> - в восьмеричной. Число знаков после "0o" не должно превышать 8.

<%0b><обычная форма> - в двоичной. Число знаков после "0b" не должно превышать 20.

Знак "-" также может быть только один и должен стоять перед символом "%". Примеры корректных чисел в обычной форме: 75, -%0x6f4,%0b101110,%0o1705.

Число в экспоненциальной форме представляет собой запись следующего вида (необязательные элементы заключены в квадратные скобки):

<число в обычной форме>[<.><неотрицательное число в обычной форме, может содержать ведущие нули, не влияющие на подсчет количества знаков и стоящие до символа "%" если число не в десятичной системе счисления>]<E>[<знак "+" или "-"><число в обычной форме>].

Примеры корректных чисел в экспоненциальной форме: 1.517E+4, -%0b101.00%0xfE–19, -7E.

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

Единственная строка, не содержащая пробелов, длиной не более 50 символов.

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

Выведите "YES", если строка удовлетворяет условию задачи или "NO" в противном случае.

Примеры
Входные данные
74
Выходные данные
YES
Входные данные
%0x5f7.00%0b1011E-%0o71
Выходные данные
YES

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

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

<уравнение> ::= <элемент><=><элемент>

Типы элементов:

<линейный элемент> ::= подстрока, содержащая цифры, неизвестную переменную, знаки операций (*,-,+,/,^(возведение в степень)) и круглые скобки.

<квадратный элемент> ::= добавление к линейному элементу конструкций "x^2" и "xx". Вообще несколько подряд идущих x аналогично x^(количество x), то есть xxxx эквивалентно x^4.

<логарифмический элемент> ::= добавление к линейному элементу конструкций "log","ln","exp". Log и ln обозначают натуральный логарифм.

<тригонометрический элемент> ::= добавление к линейному элементу конструкций "sin","cos","tn".

Илья также хочет, чтобы программа проверяла корректность уравнения. Уравнение некорректно если:

1. В записи уравнения есть ошибки, например, скобки не образуют правильной скобочной последовательности и тому подобное.

2. В каких-то числах встречаются ведущие нули.

3. В уравнении встречается несколько неизвестных переменных или неизвестные функции. Уравнение также некорректно, если в нем нет неизвестных переменных.

4. В уравнении встречается деление на 0 (других неверных операций быть не может). Более того, если до совершения арифметических операций, в уравнении деления на 0 не было, а потом оно появилось, то уравнение некорректно. Например, уравнение 2-x=x/(4-2^2) некорректно. Гарантируется, что результат таких промежуточных вычислений всегда помещается в тип int (longint в паскале), а все числа в уравнении не превосходят по модулю 40000. При вычислении синуса, косинуса, тангенса (вычисляются в радианах), логарифма и экспоненты следует брать лишь целую часть результата.

Знак "*" может быть опущен в следующих случаях:

1. Перед открывающей и после закрывающей скобок.

2. После числа, стоящего перед неизвестной переменной.

3. После неизвестной переменной или числа, стоящих перед функцией.

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

Единственная строка, длиной не более 255 символов с кодами от 32 до 127. Считать, что заглавные и прописные латинские буквы одинаковы.

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

Выведите wrong, если уравнение некорректно, в противном случае выведите тип уравнения: square для квадратного, trigonometric для тригонометрического, logarithmic для логарифмического или another, если уравнение не подпадает ни под один из типов.

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

Примеры
Входные данные
x(x+5)(x+1)x(3+7-2^4)2=0
Выходные данные
another
Входные данные
(sin(x))^2+(cos(x))^2=1
Выходные данные
trigonometric

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