IF672 - Algoritmos e Estruturas de Dados
novembro 2002 a março 2003

Lista 1

Essa lista NÃO é opcional

Antes de fazer estes exercícios, leia com atenção textos sobre
listas ligadas, listas duplamente ligadas,
listas circulares, pilhas e filas.

Todos os problemas devem ser solucionados usando estruturas dinâmicas. 
É terminantemente proibido o uso de arrays :-)
Para isso não falte as aulas práticas.


1. Com certeza, você já passou pela experiência na qual, quando muitas pesssoas estão usando a Internet simultaneamente, a rede torna-se muito, mas muito lenta. Para dar um fim a este problema, o CIn-UFPE desenvolveu um método para resolver tal contingência nos horários de pico, cortando o acesso à rede de algumas cidades de maneira justa e sistemática.

As cidades brasileiras foram numeradas aleatoriamente de 1 a n: São Paulo foi a número 1, Recife número 2, Salvador número 3, e assim por diante. Então um número m seria escolhido randomicamente, e a primeira cidade a ter o acesso à rede cortado seria a número 1 (claramente, nada mais justo).

Em seguida o mesmo aconteceria para cada m-ésima cidade após ela, voltando ao inicio após o n e ignorado as cidades que já estão sem rede. Por exemplo, para n=17 e m=5, o acesso seria cortado na seguinte ordem:

[ 1, 6, 11, 16, 5, 12, 2, 9, 17, 10, 4, 15, 14, 3, 8, 13, 7 ]

O problema seria cortar a rede de Recife por último (afinal, é de lá que vêm os melhores programadores). Por isso, para um dado n, é necessário escolher o valor de m cuidadosamente, para que a cidade 2 seja a última escolhida.

Seu trabalho é escrever um programa que determine, para um dado número de cidades, o menor valor de m que garanta que Recife possa navegar na web enquanto o resto das cidades está sem rede.

2. Escreva um programa que, dados dois polinômios na forma ∑cixi, encontre o polinômio resultante de sua soma.

3. Há uma famosa estação numa estrada de ferro na Cidade PushPop. O relevo da cidade é bastante acidentado, e a estação foi construída no século passado. Infelizmente, as verbas eram limitadas naquela época, por isso a estação só podia ter uma saída (veja a figura abaixo). Devido à falta de espaço disponível, ela só podia ter um trilho.


A tradição local é de que todo trem vindo da direção A continue na direção B com seus vagões reorganizados de alguma maneira. Um trem vindo da direção A possui N vagões numerados em ordem crescente (de 1 a N). O chefe de reorganizações deve saber se é possível ordenar os vagões indo para a direção B de modo que a ordem seja a1, ..., aN. Ajude-o a escrever um programa para decidir se é possível chegar à ordem desejada.

Você pode assumir que cada vagão pode ser desconectado do trem antes de entrar na estação, e podem se mover até que estejam na direção B. Suponha também que, na estação, podem entrar de uma vez quantos vagões forem necessários. Entretanto, uma vez que um vagão tenha entrado na estação, ele não pode mais voltar para a direção A. Da mesma maneira, após o vagão ter deixado a estação para a direção B, ele não pode mais voltar à estação.


[Última alteração em 12/11/2002 por katia.]