Você está na página 1de 11

OLIMPADA BRASILEIRA DE INFORMTICA

OBI

OBI2000 - Curso de Programao CADERNO DE TAREFAS


14/6/2000 8:00 s 13:00

LEIA ATENTAMENTE ESTAS INSTRUES ANTES DE INICIAR A PROVA a) proibido consultar livros, anotaes ou qualquer outro material durante a prova. permitido a consulta ao help do ambiente de programao se este estiver disponvel. b) proibido iniciar qualquer comando que no seja um editor ou um compilador, bem como acessar outras rea de trabalho que no a sua. Os comandos esto sendo monitorados, qualquer violao implicar na desclassicao sumria do aluno. c) Todas as tarefas tm o mesmo valor na correo. d) As tarefas no esto ordenadas, neste caderno, por ordem de diculdade; procure resolver primeiro as questes mais fceis. e) Preste muita ateno no nome dos arquivos fonte indicados nas tarefas. Solues na linguagem C devem ser arquivos com suxo .c; solues na linguagem C++ devem ser arquivos com suxo .cc ou .cpp; solues na linguagem Pascal devem ser arquivos com suxo .pas. f) Para problemas diferentes voc pode escolher trabalhar com linguagens diferentes, mas apenas uma soluo, em uma nica linguagem, deve ser submetida para cada problema. g) Ao nal da prova, para cada soluo que voc queira submeter para correo, copie o arquivo fonte para o disquete. h) No utilize arquivos para entrada ou sada. Todos os dados devem ser lidos da entrada padro (normalmente o teclado) e escritos na sada padro (normalmente a tela). Utilize as funes padro para entrada e sada de dados: em Pascal: readln, read, writeln, write; em C: scanf, getchar, printf, putchar; em C++: as mesmas de C ou os objetos cout e cin. i) Procure resolver o problema de maneira eciente. Na correo, ecincia tambm ser levada em conta.

Sociedade Brasileira de Computao


http://www.sbc.org.br Email: sbc@sbc.org.br

MASP

arquivo fonte: masp.pas, masp.c, masp.cc ou masp.cpp O MASP (Museu de Arte de So Paulo) tem o melhor acervo de obras de arte da Amrica Latina, sendo reconhecido mundialmente. Alm disso, o MASP diferente de museus tradicionais porque seus quadros no so pendurados em paredes (j que as paredes do MASP so janelas de vidro), mas sim apresentados em cavaletes no meio da sala de exposio. Uma grande exposio est em curso, ocupando todo o salo de exposies. Considere que: a) as obras esto organizadas no salo de exposies no formato de uma matriz de N linhas por M colunas; b) o visitante pode apenas mover-se da esquerda para a direita, iniciando na coluna 1 (primeira coluna) e terminando na coluna M (ltima coluna); c) uma trajetria de visita composta de uma seqncia de passos; a cada passo o visitante aprecia uma obra; d) um passo consiste em mover-se da coluna i para a coluna i+1 em uma linha adjacente. Ou seja, o visitante pode efetuar um movimento horizontal ou diagonal. Movimentos legais so mostrados na gura abaixo: movimentos legais: e) para dicultar ainda um pouco mais o problema, a primeira e ltima linhas (linhas de nmero 1 e N) da matriz so consideradas adjacentes (o que no possvel no MASP!); f) cada obra tem associada uma prioridade de visita. A prioridade um nmero inteiro; quanto menor o nmero, maior a prioridade de que a obra seja apreciada (note que a prioridade pode ser negativa);

7. Tarefa
Sua tarefa escrever um programa que determine a trajetria tima para uma visita ao museu, obedecendo as regras acima. A trajetria tima aquela que tem a menor soma total das prioridades das obras visitadas. Como exemplo, considere as duas exposies abaixo ( a nica diferena

entre as duas exposies a prioridade das obras da ltima linha): 3 6 5 8 3 4 1 9 4 7 1 8 3 1 2 2 2 9 3 8 8 7 9 2 6 6 4 5 6 4 3 6 5 8 3 4 1 9 4 7 1 8 3 1 2 2 2 9 3 1 8 7 9 2 2 6 4 5 6 3

As trajetrias timas para as duas exposies so indicadas na gura. Note que a trajetria tima para a exposio da direita utiliza a propriedade da adjacncia entre a primeira e a ltima linhas. No caso de haver mais de uma trajetria tima possvel, seu programa deve imprimir a trajetria de menor ordem lexicogrca (veja o formato de Sada, abaixo).

8. Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm dois nmeros inteiros positivos N e M, que indicam respectivamente o nmero de linhas e o nmero de colunas da matriz. As N linhas seguintes contm cada uma M nmeros inteiros que representam as prioridades das obras. O nal da entrada indicado por N = M = 0. Exemplo de Entrada 5 3 6 5 8 3 5 3 6 5 8 3 2 9 9 0 6 4 1 1 8 9 3 4 1 7 2 6 4 1 1 8 9 3 4 1 7 2 2 10 10 0 2 2 9 3 8 2 2 9 3 1 8 7 9 2 6 8 7 9 2 2 6 4 5 6 4 6 4 5 6 3

9. Sada
Para cada conjunto de teste da entrada seu programa deve produzir trs linhas na sada. A primeira linha deve conter um identicador do conjunto de teste, no formato Teste n, onde n numerado
3

a partir de 1. Na segunda linha deve aparecer a trajetria tima, descrita por uma seqncia de M inteiros (separados por um espao em branco), representando as linhas da matriz que constituem a trajetria tima. No caso de haver mais de uma trajetria tima possvel, seu programa deve imprimir a trajetria de menor ordem lexicogrca. A terceira linha deve ser deixada em branco. A graa mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente. Exemplo de Sada Teste 1 1 2 3 4 4 5 Teste 2 1 2 1 5 4 5 Teste 3 1 1 (esta sada corresponde ao exemplo de entrada acima)

10. Restries
0 N 100 (N = 0 apenas para indicar o m da entrada) 0 M 100 (M = 0 apenas para indicar o m da entrada) -15000 prioridade 15000 -15000 soma das prioridades de uma trajetria 15000

Anis quadrados

arquivo fonte: anel.pas, anel.c, anel.cc ou anel.cpp Considere os seguintes anis quadrados, cada um denido em uma matriz de 8 colunas por 9 linhas: ........ EEEEEE.. E....E.. E....E.. E....E.. E....E.. E....E.. E....E.. EEEEEE.. 1 ........ ........ DDDDDD.. D....D.. D....D.. D....D.. DDDDDD.. ........ ........ 2 ........ ........ ........ ........ ....AAAA ....A..A ....A..A ....AAAA ........ 3 ........ ..BBBB.. ..B..B.. ..B..B.. ..B..B.. ..BBBB.. ........ ........ ........ 4 .CCC.... .C.C.... .C.C.... .CCC.... ........ ........ ........ ........ ........ 5

Agora coloque um anel sobre o outro, comeando pelo anel 1 (que ca por baixo de todos) e terminando com o anel 5 (em cima de todos). Portanto, olhando a pilha de cinco anis pelo lado de cima vemos o seguinte: .CCC.... ECBCBB.. DCBCDB.. DCCC.B.. D.B.ABAA D.BBBB.A DDDDAD.A E...AAAA EEEEEE.. Os anis so formados por letras maisculas, cada anel com uma letra diferente. O caractere ponto (.) utilizado para representrar espaos vazios. A espessura das paredes do anel de exatamente um caractere e o comprimento dos lados nunca menor do que trs caracteres. Pelo menos uma parte de cada um dos lados do anel visvel (note que um canto conta como visvel para dois lados).

1. Tarefa
Sua tarefa escrever um programa que, dada a congurao de uma pilha de anis, determine qual a seqncia de empilhamento (de baixo para cima) que foi utilizada na construo da pilha. No exemplo acima a resposta EDABC. Se h mais de uma ordem de empilhamento possvel, seu programa deve listar todas.

2. Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm dois nmeros inteiros positivos X e Y que indicam, respectivamente, a altura e a largura da matriz que contm os anis. As X linhas seguintes contm Y caracteres cada, representando a vista superior da pilha de anis. O nal da entrada indicado quando X = Y = 0. Exemplo de Entrada 9 8 .CCC.... ECBCBB.. DCBCDB.. DCCC.B.. D.B.ABAA D.BBBB.A DDDDAD.A E...AAAA EEEEEE.. 10 10 ..AAAAA... ..ACCCA... ..AC.CA... ..AC.CA... ..ACCCA... ..AAAAA... .......... ...BBB.... ...B.B.... ...BBB.... 0 0

3. Sada
Para cada conjunto de teste da entrada seu programa deve produzir uma lista das letras dos anis, na ordem em que estes foram empilhados, do mais abaixo para o mais acima. A lista deve ser precedida de uma linha que identica o conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A lista composta por uma sequncia de letras, identicando anis, sem espaos em branco entre si. Se h mais de uma possibilidade de empilhamento, liste todas as possibilidades, em qualquer ordem, em linhas sucessivas. Voc pode considerar que h sempre ao menos uma ordem de empilhamento vlida. O nal de uma soluo deve ser marcado com uma linha em branco. A graa mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente. Exemplo de Sada Teste 1 EDABC

Teste 2 ABC ACB BAC BCA CAB CBA (esta sada corresponde ao exemplo de entrada acima)

4. Restries
5 X 30 5 Y 30 (X = Y = 0 apenas para indicar o m da entrada)

rvores

arquivo fonte: arvore.pas, arvore.c, arvore.cc ou arvore.cpp Como todos vocs devem ter percebido durante o curso, rvores so fundamentais em vrios ramos (!) da Computao. Este problema envolve a construo e percurso de rvores binrias.

1. Tarefa
Dada uma rvore binria, voc deve escrever um programa que produza um percurso em nveis. Cada vrtice de uma rvore contm um inteiro positivo que identica o vrtice unicamente. Em um percurso em nveis os vrtices em um dado nvel so visitados da esquerda para a direita, e todos os ns do nvel k so visitados antes dos ns do nvel k + 1. Por exemplo, para a rvore abaixo, 5 4 11 7 2 13 8 4 1

um percurso em nvel produz 5, 4, 8, 11, 13, 4, 7, 2, 1.

2. Entrada
Na entrada uma rvore binria especicada como uma seqncia de pares (v, p) onde v o valor do vrtice cujo caminho desde a raiz descrito pelo vetor p. Os elementos de p tm valor 1 ou -1, representanto respectivamente um ramo direito ou um ramo esquerdo. O nal do vetor p indicado por um elemento de valor 0. Na rvore da gura acima, o vrtice que contm 13 especicado por (13, [1, -1, 0]) e o n que contm 2 especicado por (2, [-1, -1, 1, 0]). A raiz especicada por (5, [0]), onde o vetor vazio representa o caminho da raiz at a prpria raiz. A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um nmero inteiro positivo N que indica o total de vrtices da rvore. As N linhas seguintes contm cada uma a descrio de um vrtice, no formato descrito acima. O nal da entrada indicado quando N = 0. Exemplo de Entrada 9 11 -1 -1 0 7 -1 -1 -1 0 8 1 0
8

5 0 4 -1 0 13 1 -1 0 2 -1 -1 1 0 1 1 1 1 0 4 1 1 0 3 10 0 20 -1 0 30 1 0 0

3. Sada
Para cada conjunto de teste da entrada seu programa deve produzir trs linhas. A primeira linha identica o conjunto de teste, no formato "Teste n", onde n numerado a partir de 1. A segunda linha deve conter os valores dos vrtices na ordem do percurso em nvel, conforme determinado pelo seu programa. A terceira linha deve ser deixada em branco. A graa mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente. Exemplo de Sada Teste 1 5 4 8 11 13 4 7 2 1 Teste 2 10 20 30 (esta sada corresponde ao exemplo de entrada acima)

4. Restries
0 N 10000 (N = 0 apenas para indicar o m da entrada) 0 valor de um vrtice 10000

Balaio

arquivo fonte: balaio.pas, balaio.c, balaio.cc ou balaio.cpp Maria mora no interior de Minas Gerais e especialista em fabricar balaios de junco. Os balaios de Maria so muito bem feitos e tm grande aceitao na regio. Cada balaio demora exatamente um dia de trabalho para ser confeccionado: Maria comea a tecer um balaio no incio do dia e no nal do dia entrega o produto para um cliente. Com a crescente demanda, Maria comeou a aceitar pedidos para o futuro: Narciso precisa de um balaio para o dia 10, Coronel Zoio precisa de um para o dia 4, Esmeralda para o dia 6, e assim por diante. Todos os pedidos, com as datas-limite de entrega, esto anotados computador que o lho de Maria comprou. Maria no sabe dizer no, e agora percebeu que aceitou mais pedidos do que vai conseguir produzir, se for considerar as datas-limite impostas pelos seus clientes. Algum poderia ajudar Maria?

1. Tarefa
Sua tarefa escrever um programa que determine qual a melhor ordem de entrega dos balaios de Maria, de forma a minimizar a chateao total causada por eventuais atrasos na entrega. A medida da chateao utiliza um sistema de medio desenvolvido por Maria, por experincia anterior: ela sabe que se atrasar o balaio de Narciso, isso vai causar uma chateao de nvel 13; Esmeralda muito boazinha e, se Maria atrasar a sua entrega, a chateao ser nvel 0. No entanto, se atrasar o balaio do Coronel Zoio, ela ter uma chateao de nvel 125. A chateao total dada pela soma das chateaes causadas por todos os atrasos. Considere que Maria trabalha todos os dias, sem descanso, e os dias so numerados sequencialmente a partir de 1.

2. Entrada
A entrada composta de vrios conjuntos de teste. A primeira linha de um conjunto de teste contm um nmero inteiro positivo N, que indica quantidade de pedidos pendentes. A segunda linha contm o vetor de inteiros positivos L, em que L[i] que indica a data-limite para entrega do pedido i (1 i N). A terceira linha contm o vetor de inteiros positivos C, em que C[i] indica o nvel de chateao ocasionado se o prazo L[i] no for obedecido (1 i N). O nal da entrada indicado por N = 0. Exemplo de Entrada 3 10 6 4 21 0 125 7 4 2 4 3 1 4 6 10 60 50 40 30 20 10 0

3. Sada
Para cada conjunto de teste da entrada seu programa deve produzir trs linhas na sada. A primeira linha deve conter um identicador do conjunto de teste, no formato Teste n, onde n numerado
10

a partir de 1. Na segunda linha devem aparecer os identicadores dos pedidos, na ordem em que os pedidos devem ser entregues, separados por espaos em branco. A terceira linha deve ser deixada em branco. A graa mostrada no Exemplo de Sada, abaixo, deve ser seguida rigorosamente. Exemplo de Sada Teste 1 3 2 1 Teste 2 5 2 4 3 6 7 1 (esta sada corresponde ao exemplo de entrada acima)

4. Restries
0 N 1000000 (N= 0 apenas para indicar o m da entrada) 1 L[i] 15000 0 C[i] 15000 0 chateao total 15000

11

Você também pode gostar