АВТ
Language:

Remote Training on Programming

Problems On-line status Contests FAQ
For authors:
Register  ||  Login
 
Hello, Guest! Login or register.

824. Recursion

Time Limit: 2 seconds
Memory Limit:65535KB
Points:10
View Problem Statistics Submit Problem added Administrator

«Чтобы понять рекурсию, надо понять рекурсию»

Фольклор

Одним из важных понятий, используемых в теории алгоритмов, является рекурсия. Неформально её можно определить как использование в описании объекта самого себя. Если речь идёт о процедуре, то в процессе исполнении эта процедура напрямую или косвенно (через другие процедуры) вызывает сама себя.

Рекурсия является очень «мощным» методом построения алгоритмов, но таит в себе некоторые опасности. Например, неаккуратно написанная рекурсивная процедура может войти в бесконечную рекурсию, то есть никогда не закончить своё выполнение (на самом деле выполнение закончится с переполнением стека).

Поскольку рекурсия может быть косвенной (процедура вызывает сама себя через другие процедуры), то задача определения факта, является ли конкретная процедура рекурсивной, может быть достаточно сложна.

Рассмотрим программу, состоящую из n процедур P1, P2, …, Pn. Пусть для каждой процедуры известны процедуры, которые она может вызывать. Процедура P называется потенциально рекурсивной, если существует такая последовательность процедур Q0, Q1, …, Qk, что Q0 = Qk = P и для i = 1…k процедура Qi-1 может вызвать процедуру Qi.

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

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

Первая строка входного файла содержит целое число n — количество процедур в программе (1 £ n £ 100).

Далее следуют n блоков, описывающих процедуры. Блоки отделены друг от друга строками, каждая из которых содержит по 5 символов «*» (звёздочка).

Описание процедуры начинается со строки, содержащий её идентификатор, состоящий только из маленьких букв латинского алфавита и цифр. Идентификатор может начинаться как с буквы, так и с цифры. Длина идентификатора от 1 до 100 символов. Далее идёт строка, содержащая число k (k £ n) — количество процедур, которые могут быть вызваны описываемой процедурой. Последующие k строк содержат идентификаторы этих процедур — по одному идентификатору в строке.

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

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

Для каждой процедуры, присутствующей во входном файле, в порядке, в каком они перечислены во входном файле, необходимо вывести в отдельной строке название процедуры, затем двоеточие, пробел, затем слово YES, если процедура является потенциально рекурсивной, или слово NO — в противном случае.

Пример входного и выходного файлов

STDIN

STDOUT

3

p1

2

p1

p2

*****

p2

1

p1

*****

p3

1

p1

p1: YES

p2: YES

p3: NO

 


View Problem Statistics Submit Author/source:
Problems from Contests / School olympiads of Vologda region / Vologda Region School Olympiad 2007 /
826. Nearest Numbers 824. 823. Sequence of Numbers 827. Sum of Numbers
We can all benefit by doing occasional "toy" programs, when artificial restrictions are set up, so that we are forced to push our abilities to the limit. The art of tackling miniproblems with all our energy will sharpen our talents for the real problems. Donald E. Knuth.
time generating 0.468 sec.
© Copyright VSTU, AVT, Nosov D.A.