• Nenhum resultado encontrado

Tópicos Especiais em Programação 2009/1

N/A
N/A
Protected

Academic year: 2021

Share "Tópicos Especiais em Programação 2009/1"

Copied!
12
0
0

Texto

(1)

Tópicos Especiais em Programação  2009/1

Prova 2

(2)
(3)

Problema A

Lobo Mau

fonte: lobo.c ou lobo.cpp

Descrição

Na fazenda do Sr. Amarante existe um certo número de ovelhas. Enquanto elas estão dormindo profundamente, alguns lobos famintos tentam invadir a fazenda e atacar as ovelhas. Ovelhas normais cariam indefesas diante de tal ameaça, mas felizmente as ovelhas do Sr. Amarante são praticantes de artes marciais e conseguem defender-se adequadamente.

A fazenda possui um formato retangular e consiste de campos arranjados em linhas e colunas. Cada campo pode conter uma ovelha (representada pela letra `k'), um lobo (letra `v'), uma cerca (símbolo `#') ou simplesmente estar vazio (símbolo `.'). Consideramos que dois campos pertencem a um mesmo pasto se podemos ir de um campo ao outro através de um caminho formado somente com movimentos horizontais ou verticais, sem passar por uma cerca. Na fazenda podem existir campos vazios que não pertencem a nenhum pasto. Um campo vazio não pertence a nenhum pasto se é possível escapar da fazenda a partir desse campo (ou seja, caso exista um caminho desse campo até a borda da fazenda).

Durante a noite, as ovelhas conseguem combater os lobos que estão no mesmo pasto, da seguinte forma: se em um determinado pasto houver mais ovelhas do que lobos, as ovelhas sobrevivem e matam todos os lobos naquele pasto. Caso contrário, as ovelhas daquele pasto são comidas pelos lobos, que sobrevivem. Note que caso um pasto possua o mesmo número de lobos e ovelhas, somente os lobos sobreviverão, já que lobos são predadores naturais, ao contrário de ovelhas.

Escreva um programa que, dado um mapa da fazenda do Sr. Amarante indicando a posição das cercas, ovelhas e lobos, determine quantas ovelhas e quantos lobos estarão vivos na manhã seguinte.

Entrada

A entrada contém vários casos de teste. A primeira linha de um caso de teste contém dois inteiros R e C que indicam o número de linhas (3 ≤ R ≤ 250) e de colunas (3 ≤ C ≤ 250) de campos da fazenda. Cada uma das

R linhas seguintes contém C caracteres, representando o conteúdo do campo localizado naquela linha e coluna (espaço vazio, cerca, ovelha ou lobo).

A entrada termina quando R = C = 0.

Saída

Para cada caso de teste seu programa deve imprimir uma única linha, contendo dois inteiros, sendo que o primeiro representa o número de ovelhas e o segundo representa o número de lobos que ainda estão vivos na manhã seguinte.

(4)

Exemplo

Entrada Saída 6 6 ...#.. .##v#. #v.#.# #.k#.# .###.# ...### 8 8 .######. #..k...# #.####.# #.#v.#.# #.#.k#k# #k.##..# #.v..v.# .######. 9 12 .###.#####.. #.kk#...#v#. #..k#.#.#.#. #..##k#...#. #.#v#k###.#. #..#v#....#. #...v#v####. .####.#vv.k# ...####. 0 0 0 2 3 1 3 5

(5)

Problema B

Quadrinhos do Caxola

fonte: caxola.c ou caxola.cpp

Descrição

Caxola é um menino que gosta de colecionar quadrinhos de super-heróis dos quais ele é fã. Ele coleciona diversos títulos de heróis diferentes e também compra as edições especiais que envolvem seus ídolos.

Entretanto, recentemente Caxola tem estudado muito e andou sem tempo de ler as últimas historinhas. Como ele gosta de colecionar as revistas além de lê-las, ele continuou comprando-as mesmo estando atarefado.

Além disso, em breve ele terá férias dos estudo e pretende por em dia sua leitura. Assim, ele quer ler suas revistas mas não sabe em que ordem fazê-lo, pois acabou armazenando-as de forma desorganizada. Por sorte, ele achou um site que diz, para cada revista, quais outras revistas devem ser lidas antes dela para que sua história seja totalmente compreendida.

Como Caxola tem muitas revistas e a lista é muito extensa, ele quer sua ajuda e pediu para você escrever um programa que, dadas essas informações, encontre a ordem em que Caxola deve ler as revistas.

Entrada

A entrada é composta de vários casos de teste. Cada caso de teste é iniciado por uma linha contendo um único número inteiro, N (1 ≤ N ≤ 1.000), representando o número de revistas de Caxola, as quais são numeradas sequencialmente de 1 a N. Das N linhas seguintes, a i-ésima contém informações sobre a revista de número i. Esta linha é iniciada por um número inteiro Ci(1 ≤ Ci ≤ N), a quantidade de dependências da revista i. A seguir,

ainda na mesma linha, há Cinúmeros inteiros, cada um sendo um número entre 1 e N (inclusive), representando

as revistas que devem ser lidas antes da revista i.

Você pode assumir que o somatório dos Ci(para i = 1, . . . , N) é menor que 100.000 e que não há dependências

circulares, isto é, uma revista não deve ser lida antes dela mesma, direta ou indiretamente. A entrada termina quando N = 0.

Saída

Para cada caso de teste, seu programa deve imprimir uma única linha, contendo os números das revistas na ordem em que devem ser lidas para que sejam obedecidas as restrições. Imprima exatamente um espaço após cada número de revista. Se houver mais de uma resposta possível, qualquer uma delas será aceita.

Exemplo

Entrada Saída 3 1 3 2 1 3 0 5 1 2 0 2 1 4 2 1 2 1 3 0 3 1 2 2 1 4 3 5

(6)

Problema C

Presentes de Natal

fonte: natal.c ou natal.cpp

Descrição

O Natal na casa da família Silva é sempre muito animado, e a troca de presentes é um evento à parte. O termo troca de presentes, porém, não é o ideal, já que nem sempre uma pessoa que dá um presente a alguém recebe outro de volta. Assim, alguns dão mais presentes do que recebem, enquanto outros recebem mais presentes do que dão.

Seu primo mais novo, sempre interessado em competições, resolveu ir anotando numa folha de papel a lista de todos os presentes dados durante o Natal, com seus presentadores e presenteados. Com esta lista, ele espera poder contar quantos presentes cada um recebeu e descobrir quem foi o campeão de presentes recebidos.

A lista, porém, acabou cando muito grande, de modo que seu primo está com preguiça de fazer a contagem manualmente. Ele pede, então, que você faça um programa que, dada a lista de presentes, diga quem foi o campeão de presentes recebidos.

Entrada

A entrada consiste de vários casos de teste. A primeira linha de um caso de teste contém dois números inteiros, N e M (1 ≤ N ≤ 100, 1 ≤ M ≤ 5.000), correspondentes, respectivamente, ao número de pessoas na família (numeradas sequencialmente de 1 a N) e ao número de presentes. As M linhas seguintes contêm, cada uma, a informação sobre um presente, contendo dois números inteiros A e B (1 ≤ A, B ≤ N, A 6= B), indicando que a pessoa de número A deu um presente para a pessoa de número B. Você pode assumir que cada pessoa presenteia cada uma das outras com no máximo um presente.

A entrada termina quando N = M = 0.

Saída

Para cada caso de teste, seu programa deve imprimir uma linha contendo um único número inteiro: o número da pessoa que recebeu mais presentes. Você pode assumir que apenas uma pessoa recebeu mais presentes que todas as outras.

Exemplo

Entrada Saída 3 3 1 2 1 3 3 2 4 5 2 3 4 1 1 2 2 1 3 4 0 0 2 1

(7)

Problema D

Pedágio

fonte: pedagio.c ou pedagio.cpp

Descrição

O presidente de Pindorama, cansado das reclamações dos motoristas e da pressão da imprensa, resolveu tapar todos os buracos das estradas que interligam o país. Porém, como não tem dinheiro em caixa disponível, assinou um decreto no qual todas as estradas passam a ter cobrança de pedágio.

Muitos caram revoltados com esta decisão. A empresa onde você estagia, porém, viu naquela uma oportu-nidade para ampliar seus negócios. A diretoria decidiu, então, produzir um software que calcula os trajetos de menores custos de pedágio.

Você, como bom estagiário, foi designado para escrever um protótipo do software, um programa que, dados os valores de pedágio de diversas estradas e cidades inicial e nal de trajetos, calcule o custo mínimo de pedágio para se deslocar da cidade inicial à cidade nal.

Entrada

A entrada é composta de vários casos de teste. Cada caso de teste é iniciado com uma linha contendo dois números inteiros, N e M (1 ≤ N ≤ 100, 0 ≤ M ≤ 10.000), representando, respectivamente, o número de cidades (identicadas por inteiros de 1 a N) e o número de estradas a serem consideradas.

A seguir, há M linhas, cada uma contendo três inteiros, A, B e T (1 ≤ A, B ≤ N, A 6= B, 1 ≤ T ≤ 1.000), indicando que há uma estrada de mão única ligando as cidades A e B e cujo valor do pedágio é T . Para cada par de cidades A e B, haverá no máximo uma estrada ligando A a B e no máximo uma estrada ligando B a A.

Finalmente, a última linha do caso de teste contém dois inteiros, S e D (1 ≤ S, D ≤ N), respectivamente, as cidades inicial e nal para as quais devemos calcular o custo mínimo de pedágio para o trajeto.

A entrada termina quando N = M = 0.

Saída

Para cada caso de teste, seu programa deve imprimir uma linha com um único inteiro, representando o custo mínimo de pedágio para se deslocar da cidade S à cidade D. Se não for possível alcançar a cidade D a partir da cidade S, imprima -1 como resposta.

(8)

Exemplo

Entrada Saída 3 3 1 2 2 1 3 7 2 3 3 1 3 3 3 1 2 3 1 3 7 2 3 5 1 3 3 2 1 2 2 2 1 3 1 3 4 6 1 2 5 1 3 3 2 4 3 3 2 2 4 1 4 4 3 9 2 3 0 0 5 7 -1 10

(9)

Problema E

Categorias

fonte: categ.c ou categ.cpp

Descrição

O Blogando (http://www.blogando.pd), responsável por hospedar grande parte dos blogs de Pindorama, incluiu em sua ferramenta de postagem a possibilidade de indicar a que categorias um post pertence. Com isso, é possível realizar uma busca por categoria, na qual os resultados retornados são os posts que pertencem àquela categoria, considerando todos os blogs do site.

Apesar do grande sucesso, a novidade não vinha agradando o pessoal do Blogando. Sempre preocupados com a qualidade das buscas, os engenheiros não estavam satisfeitos com o fato de que, ao se buscar por categorias aparentemente iguais, os resultados eram diferentes. Isso acontecia porque, como a denição das categorias cava por conta dos usuários, estes poderiam escrever uma mesma categoria de diversas formas (por exemplo, Estados Unidos, EUA, USA etc.), sem contar, obviamente, os erros de digitação (por exemplo, Esatdos Unidos).

Para contornar esta diculdade, foi desenvolvido um algoritmo (parte interessante do projeto) que, dados os posts e suas categorias, tentava identicar padrões de modo a unir categorias em uma super-categoria. Após a implementação do algoritmo, a saída gerada pelo programa foi uma lista de pares de categorias, onde em cada par as categorias podiam ser consideradas similares.

A idéia, então, é agrupar as categorias similares, direta ou indiretamente (se A é similar a B e B é similar a C, então A é similar a C), numa super-categoria. Assim, quando um usuário buscar por uma categoria, os resultados exibidos serão os dos posts que pertençam a qualquer uma das categorias que compõem a super-categoria da qual a categoria buscada faz parte. No exemplo anterior, uma busca por EUA retornaria os posts que estivessem nas categorias Estados Unidos, EUA, USA ou Esatdos Unidos.

Você, estagiário recém-contratado da Blogando, acabou cando com a parte menos interessante do projeto: escrever um programa que, dada a lista de pares de categorias similares, faça a junção destas categorias e informe quantas super-categorias são criadas após as junções.

Entrada

A entrada é composta de vários casos de teste. A primeira linha de um caso de teste contém apenas um número inteiro, P (1 ≤ P ≤ 100.000), a quantidade de pares de categorias similares. A seguir, há P linhas, cada uma contendo dois nomes (diferentes) de categorias que são consideradas similares, separados por um espaço. Cada nome é uma sequência de até 100 caracteres, composta por letras minúsculas e o símbolo `_'. Você pode assumir que há, no máximo, 10.000 categorias diferentes em cada caso de teste.

A entrada termina quando P = 0.

Saída

Para cada caso de teste da entrada, seu programa deve imprimir uma única linha, contendo a quantidade de super-categorias após a junção das categorias consideradas similares.

(10)

Exemplo

Entrada Saída 4 estados_unidos eua videos youtube eua usa estados_unidos esatdos_unidos 5 sem_nocao verdade_seja_dita computata computacao bizarro gente_estranha bizarro sem_nocao musica iutubiu 0 2 3

(11)

Problema F

Transporte Universitário

fonte: transp.c ou transp.cpp

Descrição

A Universidade está promovendo um novo projeto de transporte para conectar os prédios de seus campi. Para isso, uma complexa rede composta por diferentes meios de transporte está sendo projetada.

Infelizmente, por restrições orçamentárias, a Universidade precisará rever o projeto original e reduzirá as possibilidades de locomoção ao mínimo possível. Para isso, a partir de cada um dos prédios haverá uma única forma de ir até seu destino, isto é, haverá exatamente uma sequência de transportes a serem utilizados para se ir de uma origem até um destino.

Uma das poucas coisas que não irá mudar é o discurso de inauguração do Reitor, no qual há a seguinte frase: A nova Rede de Locomoção Universitária conta com veículos que são capazes de transportar, ao todo,

X passageiros.

Assim, deseja-se que o projeto revisado seja tal que comporte a maior quantidade possível de passageiros, se somarmos as capacidades dos meios de transporte selecionados.

A você, estagiário da Reitoria, foi dada a tarefa de escrever um programa que, dado o projeto original, informe a soma das capacidades dos meios de transporte selecionados para o projeto revisto.

Entrada

A entrada consiste de vários casos de teste. A primeira linha de um caso de teste contém dois números inteiros,

N e M (1 ≤ N ≤ 1.000, 1 ≤ M ≤ 100.000), representando, respectivamente, a quantidade de prédios (numerados sequencialmente de 1 a N) e a quantidade de meios de transporte do projeto original. A seguir, há M linhas, cada uma contendo três números inteiros, A, B e T (1 ≤ A, B ≤ N, A 6= B, 1 ≤ T ≤ 10.000), indicando que há, no projeto original, um meio de transporte que liga os prédios A e B (nos dois sentidos) e cuja capacidade é de

T passageiros.

A entrada termina quando N = M = 0.

Saída

Para cada caso de teste, seu programa deve imprimir uma única linha, contendo um único número inteiro: a quantidade total de passageiros transportados pelo sistema revisado, no qual deve haver exatamente uma sequência de meios de transportes ligando uma origem a um destino.

(12)

Exemplo

Entrada Saída 3 3 1 2 5 2 3 7 3 1 6 5 7 1 2 2 2 4 5 4 5 11 1 5 9 3 2 10 1 4 3 3 4 7 4 2 1 2 5 3 4 5 0 0 13 37 -1

Referências

Documentos relacionados

UÍGE Bairro Kilomosso CARACTERÍSTICAS DO IMÓVEL: 121000m2 Rés do Chão ESTADO DO IMÓVEL: Obras inacabadas. Condomínio Kilevos

Se não vou escrever mais nada porque o jornal não vai publicar, posso agir!. SOB O OLHAR PERPLEXO DE GARCIA LOPES, DANTE RETIROU- SE

Esse estudo teve o objetivo de estimar parâmetros genéticos para escore de temperamento de bovinos da raça Nelore, entre os quais a correlação genética desta

Virginius Daniel Moody estabelece a Moody Engineering para projetos de construção e engenharia nos EUA, depois passando para testes e certificação de óleo e gás. Caleb Brett

As irmãs, tendo notícia da sentença, de joelhos, pediram ao rei que a perdoasse, pois se Amanda havia contado o sonho, foi porque lho tinha sido ordenado; que elas duas lhe

A não apresentação de declaração será entendida pelo Pregoeiro como manifestação de inexistência de fato que possa inabilitá-la, ocorrido após a obtenção dos

Ensaio fotográfico do processo de elaboração de Shakuntala (primeira mostra em 2019) por seus criadores Marilyn Nunes (atriz/cantora) e Alexandre Rosa (mú- sico/ator), que têm

Não é possível falar racionalmente do que não é racional, explicar o que se passa antes das palavras, desarticular o que é feito de uma peça apenas e a vida do autor só para