|
Имя ( регистрация )
Метки
|
Задача D: Оптимизация программы
Язык программирования Berland Pascal 7.0 очень прост. Каждая его строка содержит один оператор, который является либо оператором присваивания, либо оператором вывода. Оператор присваивания имеет вид:
<переменная>:=<выражение>; Оператор вывода имеет вид: WRITELN(<выражение>); Имя переменной всегда состоит из одной строчной буквы латинского алфавита ('A':'Z'), а выражение содержит переменные, знаки бинарных арифметических операций "#", "%", "&", круглые скобки и целочисленные константы. Выражение корректно с точки зрения стандартных математических правил. Оптимизация программы состоит из двух фаз. Во время первой фазы в программе помечаются все строки, содержащие оператор присваивания вида "<переменная>:=<константа>;". Непомеченные в первой фазе строки подаются на вход оптимизатору. Относительный порядок следования строк при этом сохраняется. Оператор присваивания может быть убран оптимизатором, если его удаление не влияет на результат вывода программы (следует учитывать, что этот оптимизатор не знает о возможном существовании строк, помеченных в первой фазе). Оптимизатор работает на ранней стадии компиляции и не может пользоваться правилами вычисления "#", "%", "&", а воспринимает их как некоторые абстрактные арифметические операции. Ваша задача реализовать функциональность оптимизатора. На вход оптимизатору подаются строки программы, не помеченные в первой фазе. Вывод оптимизатора состоит из строк, поданных ему на вход, которые он не может убрать. Изменять выражения, переменные или еще как-то модифицировать программу нельзя. Входные данные. В первой строке входного файла содержится натуральное число N (1 ≤ N ≤ 100), где N - это количество строк, поданных на вход оптимизатору. Далее следует N строк, каждая из которых содержит оператор присваивания или оператор вывода. Все строки не содержат никаких лишних символов, комментариев и строго соответствуют описанному выше формату. Их длины не превосходят 32 символа. Входные данные не содержат пробелов. Во входных данных отсутствуют строки вида "<переменная>:=<константа>;", так как они были помечены на первой фазе. Выходные данные. Выведите строки программы, удалив все лишние операторы присваивания. Относительный порядок операторов менять нельзя. Примеры:
Ограничение времени: 2 секунды Ограничение памяти: 64 мегабайта Входной файл: input.txt Выходной файл: output.txt
14-03-2007 17:26 (ссылка)
15-03-2007 21:49 (ссылка)
|
||||||||||||||||||||||||